我已经构建了一个多线程网络爬虫,它发出从相应服务器获取网页的请求。由于它是多线程的,它会使服务器负担过重。由于哪个服务器可以阻止爬虫(礼貌)。
我只想在对同一服务器的后续请求之间添加最小延迟的功能。是否将来自每个服务器(域)的robot.txt 的最小延迟存储到HashMap 并将其与向该特定服务器发出请求的最后时间进行比较是否可以?
如果在 robots.txt 中没有指定延迟怎么办?
我已经构建了一个多线程网络爬虫,它发出从相应服务器获取网页的请求。由于它是多线程的,它会使服务器负担过重。由于哪个服务器可以阻止爬虫(礼貌)。
我只想在对同一服务器的后续请求之间添加最小延迟的功能。是否将来自每个服务器(域)的robot.txt 的最小延迟存储到HashMap 并将其与向该特定服务器发出请求的最后时间进行比较是否可以?
如果在 robots.txt 中没有指定延迟怎么办?
事实上的标准 robots.txt 文件格式没有指定请求之间的延迟。这是一个非标准的扩展。
没有“Crawl-delay”指令并不意味着您可以随心所欲地锤击服务器。
是否将来自每个服务器(域)的robot.txt 的最小延迟存储到HashMap 并将其与向该特定服务器发出请求的最后时间进行比较是否可以?
这还不够。对于 robots.txt 不使用非标准指令的情况,您还需要在请求之间设置最短时间。您还应该尊重 503 响应中的“Retry-After”标头。
理想情况下,您还应该注意响应请求所花费的时间。缓慢的响应是拥塞或服务器过载的潜在迹象,如果认为是拥塞的原因,站点管理员更有可能阻止您的爬虫。
我在我的网络爬虫上使用 0.5 秒作为延迟。将其用作默认值,如果已指定,则应使用它。