2011-10-04 60 views
2

我正在創建一個新的網絡爬蟲使用C#來抓取一些特定的網站。每件事情都很好。但問題是,某些網站在某些請求後阻止了我的搜尋器IP地址。我嘗試在我的抓取請求之間使用時間戳。但沒有奏效。防止自定義網絡爬蟲被阻止

有什麼辦法可以防止網站阻止我的抓取工具嗎? 一些像這樣的解決方案將有助於(但我需要知道如何應用它們):

  • 模擬使用多個IP谷歌機器人或雅虎啜食
  • 地址(事件假IP地址)作爲履帶式客戶端IP

任何解決方案都會有所幫助。

+5

我不認爲你應該這樣做......如果網站不想被抓取,你不應該這樣做。 – BvdVen

+1

如果某個網站對您進行速率限制,那麼您最好尊重這一點。他們可能受資源限制或任何其他因素。他們可能完全阻止你。當發生這種情況時,爲什麼不減慢你的機器人呢? – jman

+1

這些網站中的一些只是因爲平均http請求率在大約12小時內被阻止。他們不關心我的抓取速度。這是網絡。當你發佈一個網站時,你應該尊重所有想看你的網頁的人。我的問題是,我該如何抓取這些網站的活動,以他們想要的抓取速度進行抓取,我不在乎這是否合法! –

回答

12

如果速度/吞吐量不是一個巨大的問題,那麼最好的解決方案可能是安裝Tor and Privoxy並通過它來路由您的爬蟲。然後您的抓取工具將隨機更改IP地址。

如果您需要抓取不希望抓取它們的網站,這是一項非常有效的技術。它還通過讓爬蟲程序的活動非常難以追溯到您,提供了一層保護/匿名性。

當然,如果網站因爲速度過快而阻止了抓取工具,那麼也許您應該對它進行一些限制。

+0

謝謝,它有幫助。我使用Tor並確定Privoxy將其用作Web代理。但另一個重要的說明是我應該配置tor每5分鐘更改一次IP地址。最好的祝福。 –

-1

這是你如何阻止僞裝者(以防萬一有人發現這個頁面搜索時如何阻止那些)

塊那招在阿帕奇:

# Block fake google when it's not coming from their IP range's 
# (A fake googlebot) [F] => Failure 
RewriteCond %{HTTP:X-FORWARDED-FOR} !^66\.249\.(6[4-9]|[78][0-9]|9[0-5])\. 
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ Googlebot/2\.[01];\ \+http://www\.google\.com/bot\.html\)$ [NC] 
RewriteRule .* - [F,L] 

或者在nginx的的完整性塊緣故

map_hash_bucket_size 1024; 
    map_hash_max_size  102400; 

    map $http_user_agent $is_bot { 
     default 0; 
     ~(crawl|Googlebot|Slurp|spider|bingbot|tracker|click|parser|spider)$ 1; 
    } 

    geo $not_google { 
     default  1; 
     66.0.0.0/8 0; 
    } 

    map $http_user_agent $bots { 
     default   0; 
     ~(?i)googlebot  $not_google; 
    }