Python Scrapy-根据提供的属性在运行时更改设置

Python Scrapy-根据提供的属性在运行时更改设置,python,python-3.x,scrapy,scrapy-spider,Python,Python 3.x,Scrapy,Scrapy Spider,我和scrapy在一起玩得很开心,这是facebook帖子的蜘蛛 如果提供了布尔属性,我想在运行时更改settings.py中的CONCURRENT_REQUESTS参数 我尝试按如下方式覆盖来自爬虫的方法,但似乎不起作用 @classmethod def from_crawler(cls, crawler, **kwargs): settings = cls(crawler.settings) if 'conc' in kwargs: settings.set(

我和scrapy在一起玩得很开心,这是facebook帖子的蜘蛛

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

我尝试按如下方式覆盖来自爬虫的方法,但似乎不起作用

@classmethod
def from_crawler(cls, crawler, **kwargs):
    settings = cls(crawler.settings)
    if 'conc' in kwargs:
        settings.set('CONCURRENT_REQUESTS',32)
    return settings
你能告诉我如何正确使用它,以及如何更改初始值吗。我是否应该将所有属性解析从_crawler移入?
谢谢

我刚刚注意到,因为我可以在运行时使用“-s CONCURRENT_REQUESTS=32”。另一个选项是覆盖update_settings方法,以下是任何遇到此问题的人的参考:
中使用的并发请求设置。
设置本身是不可变的。但是
scrapy.core.downloader
对象是可变的

您可以通过spider方法动态更改此值

class FacebookSpider(scrapy.Spider):
.......    
    def __init__(self, *args, **kwargs):
        if 'conc' in kwargs:
            self.crawler.engine.downloader.total_concurrency = 32
基于这一信息,再加上它,即使是在执行后也有可能做到这一点

将telnet客户端连接到端口(例如,
1234
)&启动
scrapy crawl
命令时记录的密码,并发出以下交互式Python语句来修改当前运行的
下载程序

$telnet 127.0.0.1 6023#从日志中读取实际端口。
正在尝试127.0.0.1。。。
已连接到127.0.0.1。
转义字符为“^]”。
用户名:scrapy
密码:
>engine.downloader.total\u并发
8.
>>>engine.downloader.total_并发性=32
>>>est()
执行引擎状态
time()-engine.start_时间:14226.628035554535
引擎。具有_容量():False
len(发动机。下载器。激活):28
发动机.刮板.是否怠速():False
engine.spider.name:
发动机。星形轮处于怠速(发动机。星形轮):错误
engine.slot.closing:False
len(引擎插槽进程):32
len(engine.slot.scheduler.dqs或[]):531
len(engine.slot.scheduler.mqs):0
len(引擎、刮板、插槽、队列):0
len(引擎、刮刀、插槽、活动):0
引擎.scraper.slot.active\u大小:0
engine.scraper.slot.itemproc_大小:0
引擎.scraper.slot.needs_backout():False

上面相同的交互语句可以在
Crawler.parse()
方法中作为代码编写。

可能的重复项您是否尝试过类似
scrapy crawl spider-s CONCURRENT_REQUESTS=32的方法?