我很乐于做文章,正在研究这个project,这是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吗? 谢谢!
答案 0 :(得分:0)
我刚刚注意到,因为我可以在运行时使用“ -s CONCURRENT_REQUESTS = 32”。另一个选择是覆盖update_settings方法,这是遇到此问题的任何人的参考: Update scrapy settings based on spider property
答案 1 :(得分:0)
ntohl()
设置。
设置本身是不可变的。但是CONCURRENT_REQUESTS
对象是可变的。
您可以通过Spider方法动态更改此值。
scrapy.core.downloader
....
答案 2 :(得分:0)
基于此信息丰富的issue#4196与telnet console的结合,甚至可以在执行后执行。
在启动1234
命令时将telnet客户端连接到 port (例如scrapy crawl
)和 password 并记录以下内容修改当前运行的downloader
的Python语句:
$ telnet 127.0.0.1 6023 # Read the actual port from logs.
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Username: scrapy
Password: <copy-from-logs>
>>> engine.downloader.total_concurrency
8
>>> engine.downloader.total_concurrency = 32
>>> est()
Execution engine status
time()-engine.start_time : 14226.62803554535
engine.has_capacity() : False
len(engine.downloader.active) : 28
engine.scraper.is_idle() : False
engine.spider.name : <foo>
engine.spider_is_idle(engine.spider) : False
engine.slot.closing : False
len(engine.slot.inprogress) : 32
len(engine.slot.scheduler.dqs or []) : 531
len(engine.slot.scheduler.mqs) : 0
len(engine.scraper.slot.queue) : 0
len(engine.scraper.slot.active) : 0
engine.scraper.slot.active_size : 0
engine.scraper.slot.itemproc_size : 0
engine.scraper.slot.needs_backout() : False
以上相同的交互式语句可以用Crawler.parse()
方法编写为代码。