採集時如何有效地防止被網站屏蔽IP

1) 測試安全間隔。web

        測試的目的就是獲得網站容許的最大訪問頻率是多少,肯定一個合理的訪問時間間隔。方法是:先使用一個較大的間隔(例如30秒)去訪問網站(能夠本身寫程序實現,也能夠藉助相似iMacros的瀏覽器自動化插件),若是不會被屏蔽就減小間隔時間,重複上述步驟直到IP被屏蔽。假設間隔3秒正常,間隔2秒時被屏蔽了,咱們就能大概估計出網站容許的最大訪問頻率限制爲「1次/3秒」。瀏覽器

2) 制定控制策略。安全

        若是咱們使用「1次/大於3秒」的頻率去訪問網站就是安全的(固然這個頻率越小越安全),根據咱們的經驗,大多網站使用「大於3秒」的時間間隔訪問是不會觸發網站的屏蔽策略(咱們的建議間隔值:5秒)。多線程

        在程序中的實現方法:對於同一個IP,在下載頁面以前判斷與上次訪問間隔的時間是否超過5秒了,若是沒有就sleep,直到超過5秒才能發出下一個請求。測試

3) 用多線程+HTTP代理提速。網站

        若是咱們採用5秒的時間間隔意味着每分鐘咱們只能完成12次的訪問(HTTP請求),一天也僅僅能完成不到2萬次的下載(3600 * 24  / 5 = 17280)。這個速度對於小規模的網站還能接受,但對於擁有上百萬甚至千萬頁面的網站來講,這個速度實在是太慢了。以大衆點評網爲例,1500萬頁,照這個速度須要2年零4個月才能完成,太可怕了。spa

        而咱們採集一次大衆點評網僅須要15天左右,咱們是怎麼作到的呢? 就是經過多線程+ HTTP代理。用過HTTP代理的蟲師都知道當咱們經過高匿名HTTP代理髮出一個請求,目標網站只能檢測到HTTP代理的IP,而沒法檢測到源IP,也沒法知道你在使用代理,對目標網站來講這個請求是來自於另一個訪客(與你無關)。假設咱們擁有100個穩定高匿的HTTP代理,仍然在同IP間隔5秒的前提下,理論上天天能達到的下載量是170萬!插件

        在程序中的實現方法:開啓100個線程,每一個線程固定地使用一個HTTP代理,每一個線程處理不一樣的採集任務,每一個線程內控制訪問網站的速度。因爲數據提取是純計算操做多線程並不能加速,12核CPU環境下,實際天天的採集量能達到100萬左右(每一個頁面提取20個字段左右)。線程

相關文章
相關標籤/搜索