我希望每次在蜘蛛上使用不同的设置。之前已经提出过各种各样的问题,但答案并不适用于此案例和/或旧版本的scrapy。
scrapy文档清楚地表明设置按预先确定的顺序加载,每个蜘蛛设置(custom_settings
)对每个项目设置(settings.py
)进行预测。
我想在settings.py中使用我的通用全局设置,然后使用custom_settings
覆盖它们。问题是custom_settings不能在__init__
方法中声明,它必须在类本身中声明。
我希望能够做到这样的事情:
import scrapy
class MySpider(Spider):
...
// custom_settings needs to be set and populated here.
// custom_settings = {}
def __init__(self, spidername=None, **kwargs):
...
// But I need to populate the value of custom-settings here.
// So that I know what the spidername is
// But the problem is, scrapy ignores this.
custom_settings = open('//filepath/' + spidername).read()
...
def parse(self, response):
// Use value of MY_SETTING (a custom setting)
print(scrapy.settings.getint('MY_SETTING'))
// Use value of DEPTH_LIMIT (a built-in setting)
print(scrapy.settings.getint('DEPTH_LIMIT'))
...
spidername
参数作为命令行参数发送给spider,用于指示要加载的配置文件。
那么如何根据命令行输入参数更改每个蜘蛛的设置?
请注意,我不想使用其他答案中突出显示的process.crawl
方法,因为我希望将来使用scrapyd,而且我不相信它们是兼容的。