1. 程式人生 > >python爬蟲之反爬蟲技術

python爬蟲之反爬蟲技術

一般網站從三個方面反爬蟲:1.使用者請求的Headers,2.使用者行為,3.網站目錄和資料載入方式。

前兩種比較容易遇到,大多數網站都從這些角度來反爬蟲。第三種一些應用ajax的網站會採用,這樣增大了爬取的難度(防止靜態爬蟲使用ajax技術動態載入頁面)。

1、從使用者請求的Headers反爬蟲是最常見的反爬蟲策略。

偽裝header。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中新增Headers,將瀏覽器的User-Agent複製到爬蟲的Headers中;或者將Referer值修改為目標網站域名[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程式中模擬訪問請求頭中新增]。對於檢測Headers的反爬蟲,在爬蟲中修改或者新增Headers就能很好的繞過。

2、基於使用者行為反爬蟲

還有一部分網站是通過檢測使用者行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。[這種防爬,需要有足夠多的ip來應對]

(1)、大多數網站都是前一種情況,對於這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測後全部儲存起來。有了大量代理ip後可以每請求幾次更換一個ip,這在requests或者urllib中很容易做到,這樣就能很容易的繞過第一種反爬蟲。

(2)、對於第二種情況,可以在每次請求後隨機間隔幾秒再進行下一次請求。有些有邏輯漏洞的網站,可以通過請求幾次,退出登入,重新登入,繼續請求來繞過同一賬號短時間內不能多次進行相同請求的限制。[評論:對於賬戶做防爬限制,一般難以應對,隨機幾秒請求也往往可能被封,如果能有多個賬戶,切換使用,效果更佳]

3、動態頁面的反爬蟲

上述的幾種情況大多都是出現在靜態頁面,還有一部分網站,我們需要爬取的資料是通過ajax請求得到,或者通過Java生成的。

解決方案:Selenium+PhantomJS                           

Selenium:自動化web測試解決方案,完全模擬真實的瀏覽器環境,完全模擬基本上所有的使用者操作

PhantomJS :一個沒有圖形介面的瀏覽器

總結如圖: