寫在前面
題目所說的并不是目的,主要是為了更詳細(xì)的了解網(wǎng)站的反爬機制,如果真的想要提高博客的閱讀量,優(yōu)質(zhì)的內(nèi)容必不可少。
了解網(wǎng)站的反爬機制
一般網(wǎng)站從以下幾個方面反爬蟲:
1. 通過Headers反爬蟲
從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。很多網(wǎng)站都會對Headers的User-Agent進(jìn)行檢測,還有一部分網(wǎng)站會對Referer進(jìn)行檢測(一些資源網(wǎng)站的防盜鏈就是檢測Referer)。
如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復(fù)制到爬蟲的Headers中;或者將Referer值修改為目標(biāo)網(wǎng)站域名。對于檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。
2. 基于用戶行為反爬蟲
還有一部分網(wǎng)站是通過檢測用戶行為,例如同一IP短時間內(nèi)多次訪問同一頁面,或者同一賬戶短時間內(nèi)多次進(jìn)行相同操作。
大多數(shù)網(wǎng)站都是前一種情況,對于這種情況,使用IP代理就可以解決。我們可以將代理IP檢測之后保存在文件當(dāng)中,但這種方法并不可取,代理IP失效的可能性很高,因此從專門的代理IP網(wǎng)站實時抓取,是個不錯的選擇。
對于第二種情況,可以在每次請求后隨機間隔幾秒再進(jìn)行下一次請求。有些有邏輯漏洞的網(wǎng)站,可以通過請求幾次,退出登錄,重新登錄,繼續(xù)請求來繞過同一賬號短時間內(nèi)不能多次進(jìn)行相同請求的限制。
還有針對cookies,通過檢查cookies來判斷用戶是否是有效用戶,需要登錄的網(wǎng)站常采用這種技術(shù)。更深入一點的還有,某些網(wǎng)站的登錄會動態(tài)更新驗證,如推酷登錄時,會隨機分配用于登錄驗證的authenticity_token,authenticity_token會和用戶提交的登錄名和密碼一起發(fā)送回服務(wù)器。
3. 基于動態(tài)頁面的反爬蟲
有的時候?qū)⒛繕?biāo)頁面抓取下來,發(fā)現(xiàn)關(guān)鍵的信息內(nèi)容空白一片,只有框架代碼,這是因為該網(wǎng)站的信息是通過用戶Post的XHR動態(tài)返回內(nèi)容信息,解決這種問題的方法就是通過開發(fā)者工具(FireBug等)對網(wǎng)站流進(jìn)行分析,找到單獨的內(nèi)容信息request(如Json),對內(nèi)容信息進(jìn)行抓取,獲取所需內(nèi)容。
更復(fù)雜一點的還有對動態(tài)請求加密的,參數(shù)無法解析,也就無法進(jìn)行抓取。這種情況下,可以通過Mechanize,selenium RC,調(diào)用瀏覽器內(nèi)核,就像真實使用瀏覽器上網(wǎng)那樣抓取,可以最大限度的抓取成功,只不過效率上會打些折扣。筆者測試過,用urllib抓取拉勾網(wǎng)招聘信息30頁所需時間為三十多秒,而用模擬瀏覽器內(nèi)核抓取需要2——3分鐘。
4. 限定某些IP訪問
免費的代理IP可以從很多網(wǎng)站獲取到,既然爬蟲可以利用這些代理IP進(jìn)行網(wǎng)站抓取,網(wǎng)站也可以利用這些代理IP反向限制,通過抓取這些IP保存在服務(wù)器上來限制利用代理IP進(jìn)行抓取的爬蟲。
新聞熱點
疑難解答
圖片精選