网络爬虫:如何限制每分钟/每小时对单一域的请求?

4 投票
1 回答
3427 浏览
提问于 2025-04-17 04:21

我正在和一位图书管理员合作,重新整理他组织的数字摄影档案。

我用Python写了一个小机器人,利用MechanizeBeautifulSoup,从一个集合中提取大约7000个结构不太好、内容有点错误或不完整的文档。提取的数据会整理成一个电子表格,方便他进行修正。目前我估计总共需要7500个HTTP请求来建立搜索字典,然后再获取数据,这还不包括我代码中的错误和重做,后续项目进展中还会有更多请求。

我猜应该有某种内置的限制,决定我能多快发出这些请求。即使没有,我也会给我的机器人设置一些延迟,以便对那些负担过重的网络服务器表现得礼貌一些。我的问题是(虽然这个问题很难完全准确回答),我能多快发出HTTP请求才不会遇到内置的速率限制呢?

我不太想公开我们抓取的域名的URL,但如果有必要,我会问我的朋友是否可以分享。

注意:我知道这并不是解决我们问题的最佳方法(重新整理/组织数据库),但我们正在建立一个概念验证,以说服上级相信我的朋友可以掌握数据库的副本,从而让他处理必要的繁文缛节,允许我直接与数据打交道。

他们还给了我们一个ATOM源的API,但它需要一个关键词来搜索,似乎对逐一查看特定集合中的每张照片没有什么用。

1 个回答

4

HTTP没有内置的请求限制。大多数常见的网络服务器在默认情况下并没有设置请求限制。如果网站有请求限制,几乎肯定是网站管理员自己设置的,你需要询问他们具体的配置情况。

一些搜索引擎会遵循一种非标准的扩展规则,这个规则在robots.txt文件中可以建议一个请求限制,所以可以查看一下robots.txt文件里是否有Crawl-delay这个设置。

HTTP确实有一个并发连接的限制,最多允许两个连接,但浏览器已经开始忽视这个限制,并且正在努力修订这个标准,因为这个限制已经过时了。

撰写回答