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

时间:2011-10-04 06:28:13

标签: c# web-crawler google-crawlers

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

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

  • 模拟Google bot或yahoo slurp
  • 使用多个IP地址(事件虚假IP地址)作为抓取工具客户端IP

任何解决方案都会有所帮助。

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:-1)

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

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