首页 > 解决方案 > Scrapy - 根据提供的属性在运行时更改设置

问题描述

我很喜欢scrapy,在这个项目上工作,一个Facebook帖子的蜘蛛。

如果提供了布尔属性,我想在运行时更改 settings.py 中的 CONCURRENT_REQUESTS 参数

我尝试如下覆盖from_crawler方法,但似乎不起作用

@classmethod
def from_crawler(cls, crawler, **kwargs):
    settings = cls(crawler.settings)
    if 'conc' in kwargs:
        settings.set('CONCURRENT_REQUESTS',32)
    return settings

你能告诉我如何正确,以及如何更改__init__。我应该移动 from_crawler 中解析的所有属性吗?谢谢!

标签: pythonpython-3.xscrapyscrapy-spider

解决方案


CONCURRENT_REQUESTSscrapy.core.downloader.total_concurrency中使用的设置。
设置本身是不可变的。但是scrapy.core.downloader对象是可变的。

您可以从蜘蛛方法动态更改此值。

class FacebookSpider(scrapy.Spider):
.......    
    def __init__(self, *args, **kwargs):
        if 'conc' in kwargs:
            self.crawler.engine.downloader.total_concurrency = 32

……


推荐阅读