Python爬蟲開發(fā):反爬蟲措施以及爬蟲編寫注意事項
↑ 關(guān)注 + 星標 ,每天學Python新技能
后臺回復(fù)【大禮包】送你Python自學大禮包
反爬蟲的幾重措施
1.IP限制
如果是個人編寫的爬蟲,IP可能是固定的,那么發(fā)現(xiàn)某個IP請求過于頻繁并且短時間內(nèi)訪問大量的頁面,有爬蟲的嫌疑,作為網(wǎng)站的管理或者運維人員,你可能就得想辦法禁止這個IP地址訪問你的網(wǎng)頁了。那么也就是說這個IP發(fā)出的請求在短時間內(nèi)不能再訪問你的網(wǎng)頁了,也就暫時擋住了爬蟲。
2.User-Agent
User-Agent是用戶訪問網(wǎng)站時候的瀏覽器的標識
下面我列出了常見的幾種正常的系統(tǒng)的User-Agent大家可以參考一下,

并且在實際發(fā)生的時候,根據(jù)瀏覽器的不同,還有各種其他的User-Agent,我舉幾個例子方便大家理解:
safari 5.1 – MAC
User-Agent:Mozilla/5.0 (Macintosh; U; IntelMac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1Safari/534.50
Firefox 4.0.1 – MAC
User-Agent: Mozilla/5.0 (Macintosh; IntelMac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Firefox 4.0.1 – Windows
User-Agent:Mozilla/5.0 (Windows NT 6.1;rv:2.0.1) Gecko/20100101 Firefox/4.0.1
同樣的也有很多的合法的User-Agent,只要用戶訪問不是正常的User-Agent極有可能是爬蟲再訪問,這樣你就可以針對用戶的User-Agent進行限制了。
3、 驗證碼反爬蟲
這個辦法也是相當古老并且相當?shù)挠行Ч绻粋€爬蟲要解釋一個驗證碼中的內(nèi)容,這在以前通過簡單的圖像識別是可以完成的,但是就現(xiàn)在來講,驗證碼的干擾線,噪點都很多,甚至還出現(xiàn)了人類都難以認識的驗證碼(某二三零六)。


4.Ajax異步加載
5.Noscript標簽的使用
<noscript>標簽是在瀏覽器(或者用戶瀏覽標識),沒有啟動腳本支持的情況下觸發(fā)的標簽,在低級爬蟲中,基本都沒有配置js引擎,通常這種方式和Ajax異步加載同時使用。用于保護自己不想讓爬蟲接觸的信息。
6.Cookie限制
第一次打開網(wǎng)頁會生成一個隨機cookie,如果再次打開網(wǎng)頁這個cookie不存在,那么再次設(shè)置,第三次打開仍然不存在,這就非常有可能是爬蟲在工作了。很簡單,在三番屢次沒有帶有該帶的cookie,就禁止訪問。
爬蟲編寫注意事項
在這一部分,筆者希望就自己的經(jīng)驗給大家編寫爬蟲提供比較可行的建議,也為大家提一個醒:
1.道德問題,是否遵守robots協(xié)議;
2.小心不要出現(xiàn)卡死在死循環(huán)中,盡量使用urlparser去解析分離url決定如何處理,如果簡單的想當然的分析url很容易出現(xiàn)死循環(huán)的問題;
3.單頁面響應(yīng)超時設(shè)置,默認是200秒,建議調(diào)短,在網(wǎng)絡(luò)允許的條件下,找到一個平衡點,避免所有的爬蟲線程都在等待200,結(jié)果出現(xiàn)效率降低;
4.高效準確的判重模式,如果判重出現(xiàn)問題,就會造成訪問大量已經(jīng)訪問過的頁面浪費時間;
5.可以采用先下載,后分析的方法,加快爬蟲速度;
6.在異步編程的時候要注意資源死鎖問題;
7.定位元素要精準(xpath)盡量避免dirty data。
希望大家提出自己的意見,本系列大多數(shù)時間都在從微觀的角度講爬蟲各個部件的解決方案。

