防止自定义网络爬虫被阻止
本文关键字:爬虫 网络 自定义 | 更新日期: 2023-09-27 18:10:33
我正在创建一个新的网络爬虫使用C#
抓取一些特定的网站。一切都很顺利。但问题是一些网站在一些请求后阻止了我的爬虫IP地址。我尝试在抓取请求之间使用时间戳。
有没有办法防止网站阻止我的爬虫?像这样的一些解决方案会有所帮助(但我需要知道如何应用它们):
- 模拟Google bot或yahoo slurp
- 使用多个IP地址(事件假IP地址)作为爬虫客户端IP
如果速度/吞吐量不是一个很大的问题,那么最好的解决方案可能是安装Tor和privvoxy,并通过它们路由您的爬虫。然后你的爬虫将有一个随机变化的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中的一个block
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;
}