仍是這張圖,咱們看到,header中有不少信息,究竟哪個是咱們須要的呢
其實有可能一個也不須要,有可能所有都須要,這取決於你訪問的網頁的服務器需不須要你提供這些信息
最經常使用到的兩個信息是:User-Agent和Referer
User-Agent:用戶代理。是一種向訪問網站提供你所使用的瀏覽器類型、操做系統及版本、CPU 類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標識。UA字符串在每次瀏覽器 HTTP 請求時發送到服務器
Referer:HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的,服務器籍此能夠得到一些信息用於處理
其餘的信息有可能用不到,可是用到的時候在網頁中按以前的方法找到並一個一個的加上去就能夠了
那麼,咱們應該怎樣在怎麼在爬蟲代碼中假裝header呢?
這須要兩個步驟,定義、發送:
1. 定義header,即將header傳入
2. 將header發送出去
1. 定義header,即將header傳入
咱們知道,header裏面有不少的內容,好比User-Agent、Referer 等等,每一個內容都有本身的值,咱們在定義header的時候,要將內容和值一一對應的傳入
等等,"將內容和值一一對應",這種數據類型不就是字典嗎,好,那咱們就建立一個字典
php
headers = {'User-agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv :40.0) Gecko/20100101 Firefox/40.0'}
額........ 這個好像有點醜啊,換種寫法
python
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Geck o/20100101 Firefox/40.0' headers = {'User-agent':user_agent}
OK,如今來考慮怎麼將這個header發送出去
注:這裏的user_agent 是個人瀏覽器的數據,大家在編寫代碼的時候要按照前面說的方法將你本身使用的瀏覽器的user_agent填下去
2. 將header發送出去
這須要使用到urllib2.Request() 函數
在前面"最簡單的爬蟲程序"中遇到 Request() 函數,當時只是用來規範代碼的書寫,可是Request() 函數的功能不止如此,如今再一次用到,咱們就來深刻的學習
web
urllib2.Request()的功能是構造一個請求信息,返回的req就是一個構造好的請求 函數原型:urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]) url表示目標網頁地址,能夠是字符串,也能夠是請求對象Request data表示post方式提交給目標服務器的參數 headers表示用戶標識,是一個字典類型的數據,有些不容許腳本的抓取,因此須要用戶代理 origin_req_host表示請求方的主機域名或者ip地址 unverifiable還沒搞懂
因此 ,假裝header的代碼應該這樣寫
瀏覽器
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Geck o/20100101 Firefox/40.0' headers = {'User-Agent':user_agent} request = urllib2.Request(url,headers)
好了,咱們在原來代碼的基礎上加入假裝header的部分並修改
服務器