java - 网络爬虫向服务器连续请求之间的最小延迟

标签 java web webserver web-crawler robots.txt

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

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

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

最佳答案

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

没有“抓取延迟”指令并不意味着您可以随心所欲地攻击服务器。

<小时/>

Whether storing minimum delay from robot.txt from each server(domain) into a HashMap and comparing it to last timing of request made to that particular server will be all right?

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

理想情况下,您还应该注意响应请求所需的时间。响应缓慢可能表明拥塞或服务器过载,如果网站管理员认为这是造成拥塞的原因,则更有可能阻止您的抓取工具。

关于java - 网络爬虫向服务器连续请求之间的最小延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816998/

相关文章:

java - 获取用于执行 Web 应用程序的类路径条目

android - 为渐进式 Web 应用程序 (PWA) 添加 "badge notification"

web - 无需重定向到 PayPal 网站的 PayPal 付款

python - 简单 Python 网络服务器的 do_GET() 方法中的 html

java - 通过反射获取 map 项

java - 启动层java.lang.module初始化时出错。 FindException : Module javafx. 找不到控件

python - 为什么 Web 表单将字段作为 MiniFieldStorage 返回给 Python CGI?

java - 线程池如何处理 Web 服务器中的静态和动态请求?

linux - 设置 htaccess 以便除一个 IP 之外的所有人都被拒绝,但它需要身份验证

java - 使用 Spring XML 实体在带注释的文件中设置属性?