爬蟲反爬機制及反爬策略

2021-10-24 22:52:45 字數 2089 閱讀 6037

參考:

爬蟲是一種模擬瀏覽器對**發起請求,獲取資料的方法。簡單的爬蟲在抓取**資料的時候,因為對**訪問過於頻繁,給伺服器造成過大的壓力,容易使**崩潰,因此**維護者會通過一些手段避免爬蟲的訪問,以下是幾種常見的反爬蟲和反反爬蟲策略:

爬蟲與反爬蟲,這相愛相殺的一對,簡直可以寫出一部壯觀的鬥爭史。而在大資料時代,資料就是金錢,很多企業都為自己的**運用了反爬蟲機制,防止網頁上的資料被爬蟲爬走。然而,如果反爬機制過於嚴格,可能會誤傷到真正的使用者請求;如果既要和爬蟲死磕,又要保證很低的誤傷率,那麼又會加大研發的成本。

簡單低階的爬蟲速度快,偽裝度低,如果沒有反爬機制,它們可以很快的抓取大量資料,甚至因為請求過多,造成伺服器不能正常工作。而偽裝度高的爬蟲爬取速度慢,對伺服器造成的負擔也相對較小。所以,**反爬的重點也是那種簡單粗暴的爬蟲,反爬機制也會允許偽裝度高的爬蟲,獲得資料。畢竟偽裝度很高的爬蟲與真實使用者也就沒有太大差別了。

這篇文章主要討論使用 scrapy 框架時,如何應對普通的反爬機制。

最簡單的反爬機制,就是檢查 http 請求的 headers 資訊,包括 user-agent, referer、cookies 等。

在每次請求中,隨機選取乙個真實瀏覽器的 user-agent。

referer 是檢查此請求由**來,通常可以做的盜鏈判斷。在 scrapy 中,如果某個頁面 url 是通過之前爬取的頁面提取到,scrapy 會自動把之前爬取的頁面 url 作為 referfer。也可以通過上面的方式自己定義 referfer 字段。

**可能會檢測 cookie 中 session_id 的使用次數,如果超過限制,就觸發反爬策略。所以可以在 scrapy 中設定 cookies_enabled = false讓請求不帶 cookies。

也有**強制開啟 cookis,這時就要麻煩一點了。可以另寫乙個簡單的爬蟲,定時向目標**傳送不帶 cookies 的請求,提取響應中 set-cookie 字段資訊並儲存。爬取網頁時,把儲存起來的 cookies 帶入 headers 中。

在請求頭中新增 x-forwarded-for 字段,將自己申明為乙個透明的**伺服器,一些**對**伺服器會手軟一些。

x-forwarded-for 頭一般格式如下x-forwarded-for: client1, proxy1, proxy2

這裡將 client1,proxy1 設定為隨機 ip 位址,把自己的請求偽裝成**的隨機 ip 產生的請求。然而由於 x-forwarded-for 可以隨意篡改,很多**並不會信任這個值。

限制 ip 的請求數量

如果某一 ip 的請求速度過快,就觸發反爬機制。當然可以通過放慢爬取速度繞過,這要以爬取時間大大增長為代價。另一種方法就是新增**。

然後再每次請求時使用不同的** ip。然而問題是如何獲取大量的** ip?

可以自己寫乙個 ip **獲取和維護系統,定時從各種披露免費** ip 的**爬取免費 ip **,然後定時掃瞄這些 ip 和埠是否可用,將不可用的** ip 及時清理。這樣就有乙個動態的**庫,每次請求再從庫中隨機選擇乙個**。然而這個方案的缺點也很明顯,開發**獲取和維護系統本身就很費時費力,並且這種免費**的數量並不多,而且穩定性都比較差。如果必須要用到**,也可以去買一些穩定的**服務。這些服務大多會用到帶認證的**。

現在越來越多的**使用 ajax 動態載入內容,這時候可以先擷取 ajax 請求分析一下,有可能根據 ajax 請求構造出相應的 api 請求的 url 就可以直接獲取想要的內容,通常是 json 格式,反而還不用去解析 html。

然而,很多時候 ajax 請求都會經過後端鑑權,不能直接構造 url 獲取。這時就可以通過 phantomjs+selenium 模擬瀏覽器行為,抓取經過 js 渲染後的頁面。具體可以參考:

需要注意的是,使用 selenium 後,請求不再由 scrapy 的 ********** 執行,所以之前新增的請求頭等資訊都會失效,需要在 selenium 中重新新增

爬蟲高階 反爬策略的應對機制

爬蟲與反爬蟲,這相愛相殺的一對,簡直可以寫出一部壯觀的鬥爭史。而在大資料時代,資料就是金錢,很多企業都為自己的 運用了反爬蟲機制,防止網頁上的資料被爬蟲爬走。然而,如果反爬機制過於嚴格,可能會誤傷到真正的使用者請求 如果既要和爬蟲死磕,又要保證很低的誤傷率,那麼又會加大研發的成本。簡單低階的爬蟲速度...

python爬蟲反爬 爬蟲怎麼測試反爬?

有沒有反爬,如果你沒有用爬蟲抓取過,你是不可能知道的。就算要測試,你還要嘗試不同的delay。如果設定的 delay 在 的反爬頻率外,那就測不出來。如果在頻率內,那就被封。或者封ip,或者封賬號。如果一定要測出來,就簡單粗暴的方法,你不要設定delay,就不間斷的抓,最後出現兩種情況,1 有反爬,...

爬蟲反爬與反爬破解總結

這裡將自己收集的,遇到的反爬機制進行簡單的記錄和簡單的分析,如果有大佬路過,看到理解不正確的地方,希望可以指出來,學習進步,在此感激不盡。最基礎的記錄一下標題 抓包copy乙份,header字典賦值,requests傳入,簡單破解。防之前爬乙個免費ip 的 的時候,很好玩,感覺是把乙個瀏覽器的所有h...