2012-01-07 178 views

回答

48

没有为一个setting

DOWNLOAD_DELAY

默认:0

的时间(以秒为单位)的下载应该等待 从同一下载连续页面之前量网站。这可以用 来限制爬网速度,以避免太大的打击服务器。

DOWNLOAD_DELAY = 0.25 # 250 ms of delay 

阅读文档:https://doc.scrapy.org/en/latest/index.html

+0

谢谢。它工作:) – 2012-01-08 06:40:12

+4

如果你把'DOWNLOAD_DELAY = 1',我认为你不能在一分钟内得到60页。它也受下载速度和各种开销的限制。我会说它只会给你一个上限,所以你不会打太多的目标网站。 – 2014-08-27 18:46:40

7
class S(Spider): 
    rate = 1 

    def __init__(self): 
     self.download_delay = 1/float(self.rate) 

设置页面的最大量可以在一秒钟内下载。

+0

你可以添加一个描述或者说一些解释。按照现状,我必须为删除投票。 – Numeron 2014-08-20 03:48:01

3

延迟可我们在第2集说: -

我们可以同时运行履带指定的延迟。例如, scrapy抓取样品--set DOWNLOAD_DELAY = 3(这意味着两个请求之间3秒的延迟)

或者我们可以在settings.py Globaly指定默认scrapy DOWNLOAD_DELAY = 3

需要在0.25秒的延迟2个请求。

4

如果你想保持下载延迟一秒钟,设置DOWNLOAD_DELAY=1是做到这一点的方法。

但scrapy还具有自动设置下载延迟AutoThrottle的功能。它会根据Scrapy服务器和您正在爬取的网站的负载自动设置延迟。这比设置任意延迟更好。

阅读进一步了解这个上http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
我爬100多个域名,而不是被封闭自动油门开启

2

除了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