1. 程式人生 > >爬蟲IP被禁的簡單解決方法

爬蟲IP被禁的簡單解決方法

clas rate HR useragent agents 時間 tst 代理服務器 github

爬蟲以前聽上去好厲害好神秘的樣子,用好了可以成就像Google、百度這樣的索索引擎,用不好可以憑借不恰當的高並發分分鐘崩掉一個小型網站。寫到這裏想到12306每年扛住的並發請求量,覺得好牛逼。

爬蟲和反爬蟲從一直以來都是一個道高一尺魔高一丈的架勢。反爬蟲技術增加了爬取的難度,各路crawler的爬取過程可以說是一個和各種網站站長鬥智鬥勇的過程,各種解決方式可謂層出不窮,但是這裏說是“簡單”解決方案,肯定就是立足於一些比較基礎的方法,分分鐘就可以上手。

user_agent 偽裝和輪換

不同瀏覽器的不同版本都有不同的user_agent,是瀏覽器類型的詳細信息,也是瀏覽器提交Http請求的重要頭部信息。我們可以在每次請求的時候提供不同的user_agent,繞過網站檢測客戶端的反爬蟲機制。比如說,可以把很多的user_agent放在一個列表中,每次隨機選一個用於提交訪問請求。有一個提供各種user_agent的網站:

http://www.useragentstring.com/

最近又看到一個專門提供偽裝瀏覽器身份的開源庫,名字取得很直白:

fake-useragent

使用代理IP和輪換

檢查ip的訪問情況是網站的反爬機制最喜歡也最喜歡用的方式。這種時候就可以更換不同的ip地址來爬取內容。當然,你有很多有公網ip地址的主機或者vps是更好的選擇,如果沒有的話就可以考慮使用代理,讓代理服務器去幫你獲得網頁內容,然後再轉發回你的電腦。代理按透明度可以分為透明代理、匿名代理和高度匿名代理:

  • 透明代理:目標網站知道你使用了代理並且知道你的源IP地址,這種代理顯然不符合我們這裏使用代理的初衷
  • 匿名代理:匿名程度比較低,也就是網站知道你使用了代理,但是並不知道你的源IP地址
  • 高匿代理:這是最保險的方式,目標網站既不知道你使用的代理更不知道你的源IP
    代理的獲取方式可以去購買,當然也可以去自己爬取免費的,這裏有一個提供免費代理的網站,可以爬下來使用,但是免費的代理通常不夠穩定。

設置訪問時間間隔

很多網站的反爬蟲機制都設置了訪問間隔時間,一個IP如果短時間內超過了指定的次數就會進入“冷卻CD”,所以除了輪換IP和user_agent
可以設置訪問的時間間間隔長一點,比如沒抓取一個頁面休眠一個隨機時間:

  1. import timerandom
  2. time.sleep(random.random()*3)

對於一個crawler來說,這是一個比較responsible的做法。
因為本來爬蟲就可能會給對方網站造成訪問的負載壓力,所以這種防範既可以從一定程度上防止被封,還可以降低對方的訪問壓力。

參考文獻

    1. 爬蟲偽裝瀏覽器的點擊行為
    2. 爬代理IP
    3. 互聯網網站的反爬蟲策略簡析

爬蟲IP被禁的簡單解決方法