如何为不同的scrapy蜘蛛加载不同的设置?

时间:2016-11-09 15:28:06

标签: python scrapy scrapy-spider

我希望每次在蜘蛛上使用不同的设置。之前已经提出过各种各样的问题,但答案并不适用于此案例和/或旧版本的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,而且我不相信它们是兼容的。

0 个答案:

没有答案