我不想同时爬行并被阻止。我想每秒发送一个请求。
6 回答
有一个设置:
DOWNLOAD_DELAY
默认:
0
下载器在从同一网站下载连续页面之前应等待的时间(以秒为单位)。这可以用来限制爬行速度,以避免对服务器造成太大影响。
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
如果您不想要全局下载延迟,您还可以在蜘蛛上设置“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)
rate设置在一秒钟内可以下载的最大页面数量。
除了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
延迟我们可以设置 2 说:-
我们可以在运行爬虫时指定延迟。例如。scrapy crawl sample --set DOWNLOAD_DELAY=3 (这意味着两个请求之间有 3 秒的延迟)
否则我们可以在 settings.py 中指定 Globaly DOWNLOAD_DELAY = 3
默认情况下,scrapy 在 2 个请求之间需要 0.25 秒的延迟。
如果你想保持一秒钟的下载延迟,设置DOWNLOAD_DELAY=1
就是这样做的方法。
但是scrapy还有一个自动设置下载延迟的功能,叫做AutoThrottle
. 它会根据 Scrapy 服务器和您正在抓取的网站的负载自动设置延迟。这比设置任意延迟效果更好。
在http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension上阅读更多
相关信息