爬蟲(一)反爬蟲機制


爬蟲用久了,總是會被封的。——魯迅

 

有些網站,特別是一些陳年老站,沒有做過反爬蟲機制的,我們可以盡情地爬,愉快地爬,把它們的底褲。。數據全都爬下來。最多出於情懷考慮,我們爬慢一點,不給它的服務器太大壓力。但是對於有反爬蟲機制的網站,我們不能這樣。

 

U-A校驗

 

最簡單的反爬蟲機制應該是U-A校驗了。瀏覽器在發送請求的時候,會附帶一部分瀏覽器及當前系統環境的參數給服務器,這部分數據放在HTTP請求的header部分。

 

 我們要做的就是通過requests庫設置我們的爬蟲U-A。一般來說第三方庫發送請求會有一個默認的U-A,如果我們直接用這個U-A,就等於直接告訴別人,我就是爬蟲,快來禁我!有些網站如果不設置U-A是上不去的。requests庫設置U-A也很簡單。

def download_page(url):
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
    }
    data = requests.get(url,headers=headers)
    return data

當然我們如果反復訪問同一個網站,卻一直使用同一個U-A,也是不行的。可以弄一個U-A池,然后每次訪問時都從中隨機抽取一個U-A。

 

訪問頻率限制

 

一般來說,真人瀏覽網頁的速度相對程序是很慢的,但是爬蟲不一樣。如果有人一秒鍾訪問了100次同一個網站,那幾乎毫無疑問,這就是爬蟲。一般來說,面對這種情況,我們有兩種辦法來解決。

 

第一種辦法很簡單。既然訪問太快會被禁,那我訪問慢點就好了啊。我們可以在每次訪問完網站之后就設置一個time.sleep,限制訪問速度。最好是用一台機器從慢到快訪問,找到被封的閾值,然后以稍微低一點的速度進行訪問。

 

第二種方法就是換ip。網站一般是通過ip來識別訪問者的身份的,所以我們只要不停地更換ip,就可以偽裝成不同的人。同一個ip一秒鍾訪問了100次很不正常,但是100個ip一秒鍾訪問100次就很正常了。那么我們如何更換ip呢?其實也不用真正更換我們的ip,而是通過代理ip轉發我們的請求。不少網站提供了很多免費的代理ip,我們只要把它們爬下來,以備不時之需。不過很多代理ip壽命都不長,所以需要時常進行檢測。requests設置代理ip也很簡單。

proxies = {"http": "http://42.228.3.155:8080",}
requests.get(url, proxies=proxies)

 

驗證碼

 

有些網站,不管你做什么,登錄還是訪問頁面,都需要輸入驗證碼進行驗證。在這種情況下,我們必須識別出驗證碼,才能爬取網站內容。有些簡單的字母加數字的驗證碼可以用ocr進行識別,其他一些滑動驗證之類的就需要其他的技巧來破解,這里就不詳談了。

 

登錄驗證

 

登錄很多時候是服務於網站功能的,反爬蟲不過是順帶的目的。我們可以通過按F12檢查開發者工具來看網站在登錄時會發送什么數據,然后通過requests的相關函數模擬登陸。如果以后有時間會專門寫一篇文章來詳細說說。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM