防止自定义Web爬网程序被阻止

我正在使用C#创建一个新的网络爬虫来抓取一些特定的网站。 一切都很好。 但问题是有些网站在一些请求后阻止了我的抓取工具IP地址 。 我尝试在抓取请求之间使用时间戳。 但没有奏效。

有什么方法可以阻止网站阻止我的抓取工具? 像这样的一些解决方案会有所帮助(但我需要知道如何应用它们):

  • 模拟谷歌机器人或雅虎诽谤
  • 使用多个IP地址 (事件虚假IP地址)作为爬虫客户端IP

任何解决方案都有帮助

如果速度/吞吐量不是一个大问题,那么可能最好的解决方案是安装Tor和Privoxy并通过它来路由您的爬虫。 然后您的抓取工具将随机更改IP地址。

如果您需要抓取不希望对其进行爬网的网站,这是一种非常有效的技术。 它还通过使爬虫的活动很难追溯到您而提供一层保护/匿名。

当然,如果网站阻止你的抓取工具因为速度太快,那么也许你应该对它进行速率限制。

这就是你阻止骗子的方式(以防有人在搜索如何阻止这些内容时找到此页面)

在apache中阻止这个技巧:

 # 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; }