常見爬蟲方式與反

反爬蟲及其應對措施

常見的反爬措通常來說有三種:
- 通過分析用戶請求的Headers信息進行反爬蟲。
- 通過判斷同一個IP在短時間內是否頻繁訪問對應網站等進行分析;
- 通過動態頁面增加爬取的難度,達到反爬蟲的目的。

我們來具體分析分析。一般來說,前面兩種比較容易遇到,而且大多數也是根據前面兩種方式來做反爬的。

通過Header反爬蟲

根據用戶請求的Headers反爬蟲是最常見的反爬蟲策略。對於以很低速率爬起網站,難以通過服務器負載統計覺察的爬蟲,可以通過User-Agent信息來識別。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。
- 如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent複製到爬蟲的Headers中;或者使用selenium+phantomJS 能做的事情太多了,可以好好研究一下。
- 或者將Referer值修改爲目標網站域名。對於檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。

比如,在之前爬取貓眼top100的電影的時候爬取貓眼top100,貓眼就通過headers反爬。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'}

根據用戶行爲反爬蟲

還有一部分網站是通過檢測用戶行爲,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。
- 第一種。使用代理池(可以使用flask+redis維護動態代理池)。網上有許多公開的代理ip,可以單獨寫一個爬蟲把這些ip爬取下來,保存好,以後會經常使用。有了大量的ip後請求幾次之後就可以更換ip。
- 第二種。每次請求後隨機間隔幾秒再進行下一次請求。有些有邏輯漏洞的網站,可以通過請求幾次,退出登錄,重新登錄,繼續請求來繞過同一賬號短時間內不能多次進行相同請求的限制。

動態頁面的反爬蟲

上面兩中反爬蟲基本都是在靜態頁面中出現,但是還有的網站是經過JS渲染的,或者是通過ajax請求得到。
- 首先用Firebug或者HttpFox對網絡請求進行分析。

如果能夠找到ajax請求,也能分析出具體的參數和響應的具體含義,我們就能採用上面的方法,直接利用requests或者urllib2模擬ajax請求,對響應的json進行分析得到需要的數據。
能夠直接模擬ajax請求獲取數據固然是極好的,但是有些網站把ajax請求的所有參數全部加密了。我們根本沒辦法構造自己所需要的數據的請求。遇到這樣的網站,我們就不能用上面的方法了,
- 用的是selenium+phantomJS框架。

調用瀏覽器內核,並利用phantomJS執行js來模擬人爲操作以及觸發頁面中的js腳本。從填寫表單到點擊按鈕再到滾動頁面,全部都可以模擬,不考慮具體的請求和響應過程,只是完完整整的把人瀏覽頁面獲取數據的過程模擬一遍。 
用這套框架幾乎能繞過大多數的反爬蟲,phantomJS就是一個沒有界面的瀏覽器,只是操控這個瀏覽器的不是人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章