0

我已经构建了一个多线程网络爬虫,它发出从相应服务器获取网页的请求。由于它是多线程的,它会使服务器负担过重。由于哪个服务器可以阻止爬虫(礼貌)。

我只想在对同一服务器的后续请求之间添加最小延迟的功能。是否将来自每个服务器(域)的robot.txt 的最小延迟存储到HashMap 并将其与向该特定服务器发出请求的最后时间进行比较是否可以?

如果在 robots.txt 中没有指定延迟怎么办?

4

2 回答 2

1

事实上的标准 robots.txt 文件格式没有指定请求之间的延迟。这是一个非标准的扩展。

没有“Crawl-delay”指令并不意味着您可以随心所欲地锤击服务器。


是否将来自每个服务器(域)的robot.txt 的最小延迟存储到HashMap 并将其与向该特定服务器发出请求的最后时间进行比较是否可以?

这还不够。对于 robots.txt 不使用非标准指令的情况,您还需要在请求之间设置最短时间。您还应该尊重 503 响应中的“Retry-After”标头。

理想情况下,您还应该注意响应请求所花费的时间。缓慢的响应是拥塞或服务器过载的潜在迹象,如果认为是拥塞的原因,站点管理员更有可能阻止您的爬虫。

于 2012-10-10T10:57:57.577 回答
1

我在我的网络爬虫上使用 0.5 秒作为延迟。将其用作默认值,如果已指定,则应使用它。

于 2012-10-15T09:20:06.693 回答