python - Scrapy DOWNLOAD_DELAY 不适用于顺序请求

标签 python api scrapy fitbit

我目前正在使用 Scrapy Python 库。

首先,我向 Fitbit 的登录页面 (https://www.fitbit.com/login) 发出 FormRequest 调用以登录。然后我向 Fitbit 的 API (https://api.fitbit.com) 发出近 100 个请求。

为了不给 API 带来压力(并且不被禁止!),我想在 settings.py 文件中使用 DOWNLOAD_DELAY 设置请求之间的延迟。但是它不起作用。

我在教程 ( http://scrapy.readthedocs.io/en/latest/intro/tutorial.html ) 中对其进行了测试,它在那里正常工作。

你怎么看?是因为我请求 API(应该处理这些类型的访问)吗?

编辑:这是我的蜘蛛的伪代码:

class FitbitSpider:
    start_urls = ["https://www.fitbit.com/login"]

    def parse(self, response):
        yield scrapy.FormRequest(url,formdata,callback=after_login)

    def after_login(self, response):
        for i in range(100):
            yield scrapy.Request("https://api.fitbit.com/[...]")

编辑 2:这是我的 settings.py 文件:

BOT_NAME = 'fitbitscraper'

SPIDER_MODULES = ['fitbitscraper.spiders']
NEWSPIDER_MODULE = 'fitbitscraper.spiders'

DOWNLOAD_DELAY = 20 #20 seconds of delay should be pretty noticeable 

最佳答案

根据 the documentation :

DOWNLOAD_DELAY: The amount of time (in secs) that the downloader should wait before downloading consecutive pages from the same website. This can be used to throttle the crawling speed to avoid hitting servers too hard.

正如我们在那里看到的那样,此配置仅影响来自同一网站的连续页面,这是因为爬虫分配的。默认情况下,scrapy 为每个域设置一个槽(因为每个槽都应该处理自己的速度)。

现在,您还可以使用 meta 变量 download_slot 更改在哪个 slot 上处理请求,因此请确保您不是如果您不知道它能做什么,请使用该变量。

其他设置也会干扰 DOWNLOAD_DELAY,例如:

因此请确保它们未启用,或者您没有尝试在同一个项目中使用这两种设置。

同样重要的是要指出 download_delay 也可以作为 Spider 变量启用,并且它优先于设置中的那个。

关于python - Scrapy DOWNLOAD_DELAY 不适用于顺序请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994646/

相关文章:

python - 在Python中有一个元组列表,对于每个元组,希望将x[0]和x[1]放入Excel电子表格的A列和B列中

python - 为什么将记录器编码设置为 UTF-8 会写入带有 UNIX 行结尾的文件?

Payload 函数的 Python 随机函数不起作用

python - 如何中断事件信息以进行记录

python - 使用python向facebook上的人发送消息

python - Scrapy并发策略

api - TextField 发生变化,调用 api - 如何限制这个?

java - 为群组中的所有用户分配 Google 日历访问权限 (Java)

python - 使用 scrapy 从表中抓取数据

python - 在 Flask 应用程序的后台运行一个 scrapy 蜘蛛