50

我不想同时爬行并被阻止。我想每秒发送一个请求。

4

6 回答 6

76

有一个设置

DOWNLOAD_DELAY

默认:0

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

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

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

于 2012-01-07T20:41:16.227 回答
20

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

于 2013-06-03T12:28:00.510 回答
11
class S(Spider):
    rate = 1

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

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

于 2014-08-20T03:20:28.383 回答
8

除了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
于 2017-01-19T13:39:45.833 回答
7

延迟我们可以设置 2 说:-

我们可以在运行爬虫时指定延迟。例如。scrapy crawl sample --set DOWNLOAD_DELAY=3 (这意味着两个请求之间有 3 秒的延迟)

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

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

于 2015-10-14T04:17:31.963 回答
6

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

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

在http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension上阅读更多
相关信息

于 2015-10-14T14:34:25.403 回答