如何访问从项目管道scrapy设置(How to access scrapy settings fr

2019-07-17 16:38发布

如何访问settings.py中的scrapy设置从项目管道。 该文件提到它可以通过扩展爬虫访问,但是我看不出如何访问履带的管道。

Answer 1:

访问您的Scrapy设置(所记载的方法settings.py从内部) your_spider.py很简单。 所有其他的答案实在是太复杂了。 这样做的原因是Scrapy文档的维护很差,许多最近的更新与变化相结合。 无论是“设置”文档中的“ 如何访问设置 ”,也不是在“设置API”有他们不屑给任何可行的例子。 下面是一个例子,如何让你的当前USER_AGENT字符串。

只需添加以下行your_spider.py

# To get your settings from (settings.py):
from scrapy.utils.project import get_project_settings
...
class YourSpider(BaseSpider):
    ...
    def parse(self, response):
        ...
        settings = get_project_settings()
        print "Your USER_AGENT is:\n%s" % (settings.get('USER_AGENT'))
        ...

正如你所看到的,就没有必要使用@classmethod或重新定义from_crawler()__init__()函数。 希望这可以帮助。

PS。 我仍然不知道为什么使用from scrapy.settings import Settings不相同的方式工作,因为这将是进口的更明显的选择?



Answer 2:

好了,在文档http://doc.scrapy.org/en/latest/topics/extensions.html说,

主入口点Scrapy延伸(这也包括中间件和管道)是接收履带实例,它是控制Scrapy履带主被摄体的from_crawler类方法。 通过该对象可以访问设置,信号,统计数据,也控制了履带的行为,如果你的扩展需要这样的东西。

所以,那么你可以有一个函数来获取的设置。

@classmethod
def from_crawler(cls, crawler):
    settings = crawler.settings
    my_setting = settings.get("MY_SETTING")
    return cls(my_setting)

履带式引擎,然后调用与管道的初始化函数my_setting ,就像这样:

def __init__(self, my_setting):
    self.my_setting = my_setting

等功能可以访问它self.my_setting ,符合市场预期。

另外 ,在from_crawler()函数,你可以通过crawler.settings反对__init__()从管线需要,而不是拉他们全部在构造函数中,然后访问设置。



Answer 3:

正确的答案是:这要看在管道您要访问的设置。

avaleske已经回答了,如果你想你的管道的外部访问设置process_item方法,但它很可能这就是你想要的设置,因此有作为蜘蛛实例本身被传递作为参数更简单的方法。

class PipelineX(object):

    def process_item(self, item, spider):
         wanted_setting = spider.settings.get('WANTED_SETTING')


Answer 4:

项目结构是非常平坦的,为什么不:

# pipeline.py
from myproject import settings


文章来源: How to access scrapy settings from item Pipeline