如何在scrapy中的每个请求之间给出延迟?

niz*_*.sp 43 scrapy

我不想同时抓取并被阻止.我想每秒发送一个请求.

war*_*iuc 61

有一个设置:

DOWNLOAD_DELAY

默认: 0

在从同一网站下载连续页面之前,下载程序应等待的时间(以秒为单位).这可用于限制爬行速度,以避免过于严重地击中服务器.

DOWNLOAD_DELAY = 0.25    # 250 ms of delay
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你把'DOWNLOAD_DELAY = 1`,我认为你不能在一分钟内得到60页.它也受到下载速度和各种开销的限制.我会说它只给你一个上限,所以你不要太多地击中目标站点. (5认同)

Mik*_*bov 18

如果您不想要全局下载延迟,也可以在spider上设置'download_delay'属性.请参阅http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means


小智 8

class S(Spider):
    rate = 1

    def __init__(self):
        self.download_delay = 1/float(self.rate)
Run Code Online (Sandbox Code Playgroud)

速率设置可以在一秒钟内下载最大页数.


Nir*_*gar 5

延误我们可以在2中说:

我们可以在运行搜寻器时指定延迟。例如。抓取抓取示例--set DOWNLOAD_DELAY = 3(这意味着两个请求之间的延迟为3秒)

否则我们可以在settings.py DOWNLOAD_DELAY = 3中指定Globaly

默认情况下,scrapy在2个请求之间需要0.25秒的延迟。


Jef*_*cko 5

如果你想保持一秒的下载延迟,设置DOWNLOAD_DELAY=1就是这样做的.

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

http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension上进一步了解这一点
我已经抓取了超过100个域,并且没有被AutoThrottle打开阻止


Meh*_*pek 5

除了DOWNLOAD_DELAY,您还可以使用scrapy的AUTOTHROTTLE功能,https://doc.scrapy.org/en/latest/topics/autothrottle.html

它根据设置文件更改请求之间的延迟量。如果您将启动和最大延迟都设置为1,则它将在每个请求中等待1秒。

它的原始目的是改变延迟时间,因此很难检测到您的机器人。

您只需要在settings.py中进行设置,如下所示:

AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
Run Code Online (Sandbox Code Playgroud)