Scrapy DOWNLOAD_DELAY不适用于顺序请求

我目前正在使用Scrapy Python库。Scrapy DOWNLOAD_DELAY不适用于顺序请求

首先,我对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

回答:

好吧,我刚刚找到了我的问题的答案。

它来自我在运行的main.py文件中创建一个CrawlerProcess。它没有加载settings.py文件中的设置。

在此之前我做了以下内容:

process = CrawlerProcess({ 

'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'

})

process.crawl(fitbit_spider.FitbitSpider)

process.start()

现在,如果我改变CrawlerProcess到:

process = CrawlerProcess({ 

'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',

'DOWNLOAD_DELAY': 20

})

我得到想要的延迟!

注意:在使用get_project_settings()创建CrawlerProcess不工作要么。

回答:

根据the documentation:

DOWNLOAD_DELAY:下载器在等待的时间(以秒为单位)从相同的 网站下载连续页面。这可以用来限制爬行速度,以避免 太难以击中服务器。

正如我们可以看到,这个配置只影响在同一网站上连续的页面,那就是因为履带式的分配slots的。默认情况下,scrapy为每个域设置一个插槽(因为这个想法是每个插槽都应该处理它自己的速度)。现在

,你也可以改变上slot的请求可以与meta变量download_slot进行处理,所以一定要确保你不与该变量玩,如果你不知道什么可以做的。

另外,其它设置可以DOWNLOAD_DELAY像干扰:

  • CONCURRENT_REQUESTS_PER_IP
  • RANDOMIZE_DOWNLOAD_DELAY
  • AUTOTHROTTLE_ENABLED

所以要确保它们不会启用,或者你是不是想同时使用在同一个项目上的设置。

另外需要指出的是,download_delay也可以作为Spider变量启用,并且它优先于Settings中的一个。

以上是 Scrapy DOWNLOAD_DELAY不适用于顺序请求 的全部内容, 来源链接: utcz.com/qa/266011.html

回到顶部