第一種:根據headers設置反爬蟲ajax
從用戶請求的headers反爬蟲是最多見的反爬蟲策略,不少網站都會對headers的user-agent進行檢測,還有一部分網站會對referer進行檢測(一些資源網站的防盜鏈就是檢測referer),若是遇到了這類的反爬蟲機制的話,能夠直接在爬蟲中添加headers,將瀏覽器的user-agent複製到爬蟲的headers中,或者將referer值修改成目標網站域名,對於檢測headers的反爬蟲,在爬蟲中添加headers就能很好地繞過去。json
第二種:根據用戶行爲設置反爬蟲瀏覽器
還有一部分網站是經過用戶的行爲,例如同一個ip短期內屢次訪問同一個頁面,或者是同一個帳戶短期內進行相同的操做。網絡
大多數網站都是前一種狀況,對於這種狀況,使用ip代理就能夠解決,能夠專門寫一個爬蟲,爬取網上公開的代理ip,檢測後所有保存起來,這樣的代理ip爬蟲進行會用到,最好本身準備一個,有了大量的代理ip以後能夠每請求就更換一個ip,這在requests或者urllib2中很容易作到,這樣的話就能夠很容易繞過第一種爬蟲。框架
對於第二種狀況,能夠在每次請求後隨機間隔幾秒以後在進行下一次的請求,有些有邏輯漏洞的網站,能夠經過請求幾回,退出登陸,從新登陸,繼續請求來繞過同一個帳戶短期內不能屢次進行相同請求的限制。網站
第三種:根據動態頁面設置反爬蟲加密
上述的幾種狀況大多都是出如今靜態頁面,還有一部分網站,咱們須要爬取的數據是經過ajax請求獲得,或者經過JavaScript生成的。首先用Firebug或者HttpFox對網絡請求進行分析。若是可以找到ajax請求,也能分析出具體的參數和響應的具體含義,咱們就能採用上面的方法,直接利用requests或者urllib2模擬ajax請求,對響應的json進行分析獲得須要的數據。url
可以直接模擬ajax請求獲取數據當然是極好的,可是有些網站把ajax請求的全部參數所有加密了,咱們根本沒辦法構造本身所須要的數據的請求。spa
用這套框架幾乎能繞過大多數的反爬蟲,由於它不是在假裝成瀏覽器來獲取數據(上述的經過添加Headers必定程度上就是爲了假裝成瀏覽器),它自己就是瀏覽器,phantomJS就是一個沒有界面的瀏覽器,只是操控這個瀏覽器的不是人。利用selenium+phantomJS能幹不少事情,例如識別點觸式(12306)或者滑動式的驗證碼,對頁面表單進行暴力破解等等。代理