接着上一篇文章 Python爬蟲入門之初遇lxml庫,我們說一下如何模拟使用者請求,因為大多數網站都是有防爬蟲措施的
學習爬蟲要了解web知識,我們需要通過http請求頭來僞裝自己爬蟲程式
1.修改請求頭
這裡要用到python的urllib.request的子產品,首相介紹一下http請求頭,它就是你每次在通路網頁時,向伺服器傳輸的一組屬性和配置資訊。下面有七個字段被大多數浏覽器用來初始化網絡請求。
屬性
内容
說明
Host
www.baidu.com
表示我們通路的主機
Connection
keep-alive
表示是否保持連接配接
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
用戶端可以接收端傳回資料類型
User-Agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15
使用者通過什麼方式通路的伺服器,我這裡是safari浏覽器,還可以設定通過手機、ipad
Referrer
https://www.baidu.com/
表示從哪裡進入此網站的,比如從a網址跳轉到b網址,那麼通路b的時候這裡的值就是a
Accept-Encoding
gzip,deflate,sdch
接受的編碼格式
Accept-Language
en-cn,en;q=0.8
接受的語言
這是是使用者在通路網頁時所發出的host請求(表格中是我的電腦發起的請求,打開F12可檢視自己的host請求)。下面看一下為不加請求頭時python爬蟲發出的請求。
identity
Python- urllib/3.7
下面我們通過python代碼來模拟一下使用者請求
2.設定爬取間隔時間
如果通路網址過于頻繁會被有些伺服器的反爬蟲程式認為是被爬蟲惡意請求,這時候我們就要設定爬取資料的頻率
比如說最簡單的方式用如下代碼
3.使用ip代理
有時候即使設定了爬取的間隔時間,還是會被伺服器判别是爬蟲程式,是因為我們的爬蟲程式都是通過自己的ip位址發起請求,同一個ip通路次數過多會被伺服器反爬蟲機制直接拒絕
這時候我們要設定ip代理去發起請求
proxy_ip是我們的ip代理,ip代理商有很多,有錢的話可以直接去購買
4.人機驗證
目前遇到人機驗證、驗證碼的需要采用第三方的識别驗證碼方式
5.ajax請求
有些網頁一請求并沒有資料,是通過ajax異步擷取來的資料,這時候就需要我們模拟ajax請求來抓取資料
6.參數js加密
稍後補充
7.cookie限制
打開浏覽器按f12,把cookie複制,放入請求頭
總結
目前就學到這麼多,先總結一下,文中有什麼問題可以指出來,學到更多了再繼續補充