我正在创建一个新的网络爬虫,用于C#
爬取一些特定的网站。一切顺利。但问题是某些网站在某些请求后阻止了我的爬虫 IP 地址。我尝试在我的抓取请求之间使用时间戳。但没有奏效。
有什么办法可以防止网站阻止我的爬虫?像这样的一些解决方案会有所帮助(但我需要知道如何应用它们):
- 模拟 Google bot 或 yahoo slurp
- 使用多个 IP 地址(事件假 IP 地址)作为爬虫客户端 IP
任何解决方案都会有所帮助。
我正在创建一个新的网络爬虫,用于C#
爬取一些特定的网站。一切顺利。但问题是某些网站在某些请求后阻止了我的爬虫 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;
}