網站反爬方案分析

一、爬蟲識別方法

1、http日誌和流量分析
對IP訪問頻率統計,設置一個閾值,如果單位時間內某個IP訪問頻率和流量超過特定閾值就可以界定爲爬蟲。
2、Headers參數檢測
一般有User-Agent、Referer、Cookies等等,目標站點可以檢測User-Agent或者Referer參數的值來判斷是否爲爬蟲,Referer參數也可以防盜鏈。
User-Agent是檢查用戶所用客戶端的種類和版本,Referer是檢查此請求由哪裏來,通常可以做圖片的盜鏈判斷。網站可能會檢測Cookie中session_id的使用次數,如果超過限制,就觸發反爬策略。
3、在網頁源碼內放置一個對瀏覽器不可見的鏈接
正常用戶使用瀏覽器是看不到該鏈接的當然也不會去點擊,如果檢測到該鏈接被點擊,來訪IP就會被界定爲爬蟲。

二、常見反爬蟲策略

當我們識別出爬蟲之後,通常可以採取以下幾種措施來實現反爬:

  1. 臨時或永久封禁來訪ip。實現難度:簡單。破解難度:簡單。

  2. 返回驗證碼進行行爲阻止。實現難度:簡單。破解難度:困難

  3. 採用ajax異步加載:如果只是爬蟲僅爲靜態網頁爬蟲,則爬取內容爲空。實現難度:中等。破解難度:中等。

  4. 爬蟲陷阱:使爬取的內容變成其他和本網站無關的信息。實現難度:中等。破解難度:簡單

  5. 加速樂cookies驗證服務:在訪問之前服務器會先判斷客戶端請求的cookies正不正確。如果不正確,則返回錯誤狀態碼。實現難度:需第三方支持。破解難度:困難

  6. javascript渲染:網頁開發者將重要信息放在網頁中但不寫入html標籤中,而瀏覽器會自動渲染script標籤的js代碼將信息展現在瀏覽器當中,而爬蟲是不具備執行js代碼的能力,所以無法將js事件產生的信息讀取出來。實現難度:中等。破解難度:中等。

如果還有爬蟲可以繞過這些反爬策略的話,網站一般就會放棄阻攔了,因爲攔截成本太高得不償失。此外,反爬策略太嚴格的話會影響正常用戶的訪問。簡單來說,反爬措施越多,網站用戶體驗越差。

三、針對反爬策略攻擊者可能會採取的措施

從攻擊者的角度來考慮,針對上述涉及到的反爬措施

- 針對反爬策略–臨時或永久封禁來訪ip

可以設置等待時間(顯式或隱式)和使用高匿代理IP來解決。

- 針對反爬策略–驗證碼

如果不是每次都彈驗證碼也可以使用高匿代理IP解決,如果感覺高匿代理不穩定或者收集起來不方便使用Tor網絡也可以;
如果每次都彈驗證碼那就得涉及到驗證碼識別了,簡單的驗證碼可以自己寫代碼處理,python有不少知名的圖像處理(識別)庫(如PIL/Pillow、Mahotas、Pymorph、pytesser、tesseract-ocr、openCV等)和算法(比如大名鼎鼎的KNN[K鄰近算法]和SVM[支持向量機]),但複雜的驗證碼例如涉及邏輯判斷和計算、字符粘連變形、前置噪音多色干擾、多語種字符混搭的大多也只能靠接入人工打碼平臺來對抗了。
人工識別:適合比較複雜的驗證碼,正確率高,但是成本也高。
機器識別:調用在線驗證碼識別軟件接口識別驗證碼,正確率百分之九十以上。

- 針對反爬策略–ajax異步加載

①可以使用fiddler / wireshark抓包分析ajax請求的界面,再通過規律仿造服務器構造一個請求訪問服務器得到返回的真實數據包;
②可以使用selenium+phantomjs解決,phantomjs是一個無頭無界面瀏覽器,使用selenium可以驅動它模擬瀏覽器的一切操作,但缺點也很明顯,爬取效率低。

  • 針對反爬策略–爬蟲陷阱

一般是比較簡單的死循環陷阱,可以對爬蟲將要爬取的鏈接進行判斷,不重複爬取相同的頁面。除此之外,對於特定的元素看清之後小心爬取,例如可使用scrapy的LinkExtractor設定unique參數爲True即可或者直接設定爬蟲的最大循環次數。

  • 針對反爬策略–加速樂的服務

稍複雜,可將瀏覽器返回的js代碼放在一個字符串中,然後利用nodejs對這段代碼進行反壓縮,然後對局部的信息進行解密,得到關鍵信息放入下一次訪問請求的頭部中。可參考:關於加速樂最新反爬蟲機制。

- 針對反爬策略–javascript渲染

使用selenium+phantomjs解決。

四、方案選型

目前企業網站常見的反爬方式一般有兩種

第一種爲企業根據網站自身特性選擇反爬措施並實現,此方式較爲靈活,但需投入大量成本,實現門檻較高。一般爲大型網站如淘寶,京東等採用。

第二種爲採取第三方提供商集成的反爬服務,此方式攔截效果好,實現成本較低。目前國內的極驗公司此服務較爲專業 https://www.geetest.com/BotSonar

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