首頁常見問題正文

Python中怎樣應(yīng)對防爬策略?

更新時間:2023-11-30 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

現(xiàn)如今因為搜索引擎的流行,網(wǎng)絡(luò)爬蟲已成為很普及的技術(shù),除了專門做搜索的Google、Yahoo、百度以外,幾乎每個大型門戶網(wǎng)站都有自己的搜索引擎。一些智能的搜索引擎爬蟲的爬取頻率比較合理,不會消耗過多的網(wǎng)站資源,但是,很多網(wǎng)絡(luò)爬蟲對網(wǎng)頁的爬取能力很差,經(jīng)常并發(fā)上百個請求循環(huán)重復(fù)爬取,這種爬蟲對中小型網(wǎng)站造成的訪問壓力非常大,很可能會導(dǎo)致網(wǎng)站訪問速度緩慢,甚至無法訪問,因此現(xiàn)在的網(wǎng)站會采取一些防爬蟲措施來阻止爬蟲的不當(dāng)爬取行為。

對于采取了防爬蟲措施的網(wǎng)站,爬蟲程序需要針對這些措施采取相應(yīng)的應(yīng)對策略,才能成功地爬取到網(wǎng)站上的數(shù)據(jù)。常用的應(yīng)對策略包括以下幾種:

1.設(shè)置User-Agent

User-Agent表示用戶代理,是HTTP協(xié)議中的一個字段,其作用是描述發(fā)出HTTP請求的終端信息,如操作系統(tǒng)及版本、瀏覽器及版本等,服務(wù)器通過這個字段可以知道訪問網(wǎng)站的用戶。

每個正規(guī)的爬蟲都有固定的User-Agent,因此,只要將這個字段設(shè)為知名的用戶代理即可。

但是,不推薦偽裝知名爬蟲,因為這些爬蟲很可能有固定的IP,如百度爬蟲。這里,推薦若干個瀏覽器的User Agent,在每次發(fā)送請求時,隨機從這些用戶代理中選擇一個即可。 具體如下:

(1) Mozilla/5.0 (Windows NT 5.1;U; en; rv:1.8.1) Gecko/ 20061208Firefox/2.0.0 Opera 9.50。

(2) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) opera 9.50。

(3) Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0。

2.使用代理IP

如果網(wǎng)站根據(jù)某個時間段以內(nèi)IP訪問的次數(shù)來判定是否為爬蟲,一日這此IP地址被封掉,User-Agent設(shè)置就會失效。遇到這種情況,可以使用代理IP完成。所謂代理IP就是介于用戶和網(wǎng)站之間的第三者,即用戶先將請求發(fā)送給代理IP,之后代理IP再發(fā)送到服務(wù)器,這時服務(wù)器會將代理IP視為爬蟲的IP,同時用多個代理IP,可以降低單個IP地址的訪問量,就能防止爬蟲爬取數(shù)據(jù)的概率。

有些網(wǎng)站提供了一大批代理IP,可以將其存儲起來以備不時之需。不過,很多代理IP的壽命比較短,需要有一套完整的機制來校驗已有代理IP的有效性。

3.降低訪問頻率

如果沒有找到既免費又穩(wěn)定的代理IP,則可以降低訪問網(wǎng)站的頻率,這樣做可以達到與用戶代理一樣的效果,防止對方從訪問量上認出爬蟲的身份,不過爬取效率會差很多。為了彌補這個缺點,可以基于這個思想適時調(diào)整具體的操作。例如,每爬取-一個頁面就休息若干秒,或者限制每天爬取的頁面數(shù)量。

4. 驗證碼限制

雖然有些網(wǎng)站不登陸就能訪問,但是它一檢測到某IP的訪問量有異常,就會馬上提出登陸要求,并隨機提供一個驗證碼。碰到這種情況,大多數(shù)情況下需要采取相應(yīng)的技術(shù)識別驗證碼,只有正確輸入驗證碼,才能夠繼續(xù)爬取網(wǎng)站。不過,識別驗證碼的技術(shù)難度還是比較大的。


分享到:
在線咨詢 我要報名
和我們在線交談!