如何在scrapy中的每个请求之间给出延迟?
没有为一个setting:
DOWNLOAD_DELAY
默认:
0
的时间(以秒为单位)的下载应该等待 从同一下载连续页面之前量网站。这可以用 来限制爬网速度,以避免太大的打击服务器。
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
谢谢。它工作:) – 2012-01-08 06:40:12
如果你把'DOWNLOAD_DELAY = 1',我认为你不能在一分钟内得到60页。它也受下载速度和各种开销的限制。我会说它只会给你一个上限,所以你不会打太多的目标网站。 – 2014-08-27 18:46:40
您还可以设置“download_delay”蜘蛛属性,如果你不希望有一个全球的下载延迟。见http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means
class S(Spider):
rate = 1
def __init__(self):
self.download_delay = 1/float(self.rate)
率设置页面的最大量可以在一秒钟内下载。
你可以添加一个描述或者说一些解释。按照现状,我必须为删除投票。 – Numeron 2014-08-20 03:48:01
延迟可我们在第2集说: -
我们可以同时运行履带指定的延迟。例如, scrapy抓取样品--set DOWNLOAD_DELAY = 3(这意味着两个请求之间3秒的延迟)
或者我们可以在settings.py Globaly指定默认scrapy DOWNLOAD_DELAY = 3
需要在0.25秒的延迟2个请求。
如果你想保持下载延迟一秒钟,设置DOWNLOAD_DELAY=1
是做到这一点的方法。
但scrapy还具有自动设置下载延迟AutoThrottle
的功能。它会根据Scrapy服务器和您正在爬取的网站的负载自动设置延迟。这比设置任意延迟更好。
阅读进一步了解这个上http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
我爬100多个域名,而不是被封闭自动油门开启
除了DOWNLOAD_DELAY,您还可以使用scrapy的自动油门功能, https://doc.scrapy.org/en/latest/topics/autothrottle.html
它根据设置文件更改请求之间的延迟量。如果您为启动延迟和最大延迟设置1,则每次请求都会等待1秒。
它的原始目的是改变延迟时间,所以你的机器人的检测会更困难。
你只需要设置在settings.py如下:
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
[这里](HTTP://计算器。com/questions/30404364/scrapy-delay-request)你有一个明确的解决方案。 – hereje 2016-06-15 17:56:19