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