爬蟲技巧,及反爬蟲辦法。

爬蟲立場

爬蟲的目的就是大規模地、長時間地獲取數據,不過,總使用一個IP去爬網站,大規模集中對服務器訪問,時間一長就有可能被拒絕,爬蟲長時間爬取數據,還可能會要求驗證碼,即便是多個賬號輪流爬取仍然會出現要求輸入驗證碼的情況。

下面5個技巧是爬蟲常用的:

技巧一:設置下載等待時間/下載頻率
大規模集中訪問對服務器的影響較大,也容易被服務器屏蔽IP。爬蟲程序可以增大爬取時間間隔。這樣比較不容易引起服務器注意。

技巧二·:修改User-Agent
最常見的就是僞裝瀏覽器,修改User-Agent(用戶代理)。
具體方法可以把User-Agent的值改爲瀏覽器的方式,甚至可以設置一個User-Agent池(list,數組,字典都可以),存放多個“瀏覽器”,每次爬取的時候隨機取一個來設置request的User-Agent,這樣User-Agent會一直在變化,防止被牆。

技巧三:設置cookies
cookie其實是儲存在用戶終端的一些被加密的數據,有些網站通過cookies來識別用戶身份,如果某個訪問總是高頻率地發請求,很可能會被網站注意到,被嫌疑爲爬蟲,這時網站就可以通過cookie找到這個訪問的用戶而拒絕其訪問。
1. 自定義設置cookies策略(防止cookierejected問題,拒絕寫入cookie) 在系列一那篇文章裏就有自定義cookie策略設置,但更多的借鑑是官方文檔的例子,設置方法其實都大同小異,因爲HttpClient-4.3.1組件版本跟以前舊版本的不同,寫法也有不同,另見官方文檔:http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/statemgmt.html#d5e553
2. 禁止cookies 通過禁止cookie,這是客戶端主動阻止服務器寫入。禁止cookie可以防止可能使用cookies識別爬蟲的網站來ban掉我們。 在scrapy爬蟲中可以設置COOKIES_ENABLES= FALSE,即不啓用cookies middleware,不向web server發送cookies。

技巧四:分佈式爬取
分佈式爬取的也有很多Githubrepo。原理主要是維護一個所有集羣機器能夠有效分享的分佈式隊列。
使用分佈式爬取還有另外一個目的:大規模抓取,單臺機器的負荷很大,況且速度很慢,多臺機器可以設置一個master管理多臺slave去同時爬取。

技巧五:修改IP
很多時候服務器識別的是IP,不是賬號。也就是說,當需要連續抓取很多數據的時候,模擬登錄沒有意義。只要是同一個IP,不管怎麼換賬號也沒有用,主要的是換IP。
web server應對爬蟲的策略主要就是直接將IP或者整個IP段都封掉禁止訪問,當IP被禁封后,轉換到其他IP繼續訪問即可。方法:代理IP、本地IP數據庫(使用IP池)。

反爬蟲陣營

前面說了那麼多爬蟲技巧,貌似爬蟲很強大!爬取辦法很多。那麼站在反爬蟲角度,服務器要如何防爬蟲呢?
常見的辦法是封IP。但是在上述技巧5面前,封IP也會失效。畢竟現在代理地址那麼多,不能把那麼多IP段全封了吧,那樣很多正常用戶也沒辦法訪問網站了。而且更重要的是,那要消耗很大的人力、時間。
最直接簡單的辦法,其實是使用具有反爬蟲功能的WAF。這裏講的反爬蟲功能可不是封IP這種老辦法。爬蟲技巧雖多,但現在的WAF反爬蟲能力,也是相當給力的。比如ShareWAF(http://www.sharewaf.com/),具備很強大的反爬蟲能力,比如前面講到爬蟲有5大技巧,而ShareWAF,同樣有五種反爬蟲手段:

ShareWAF反爬蟲手段1:封IP。
呵呵,雖然剛剛講封IP是種低級的爬蟲對付辦法,但做爲WAF還是保留了這個手段。

ShareWAF反爬蟲手段2:爬蟲識別
根據User-Agent,也是會阻攔一批爬蟲。

ShareWAF反爬蟲手段3:網頁源碼加密
爬蟲獲取信息,很多時候是需要從網頁源碼中獲取鏈接信息的,ShareWAF的網頁源碼加密功能,可以直攔阻止這類爬蟲。

ShareWAF反爬蟲手段4:網頁鏈接隱藏
ShareWAF的前端WAF功能,可以隱藏網頁中的鏈接(注:是瀏覽器解析後的,並非網頁源碼),又進一步斷了一條爬蟲獲取信息的路子。

ShareWAF反爬蟲手段5:動態令牌
對於關鍵鏈接,用停牌保護,每次訪問(包括爬蟲的訪問)都需要帶有正確的令牌,否則會被阻止。

五種爬蟲技巧,五種反爬手段,誰更勝一籌呢?根據ShareWAF官方給出的POC,ShareWAF可以阻止“一切”爬蟲!強當的強勁!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章