Scrapy:如何从蜘蛛类的 __init__() 方法访问自定义的 CLI 传递设置?

Nik*_*rov 2 python scrapy scrapy-pipeline scrapy-settings

我需要使用以下命令访问从 CLI 传递的自定义设置:

-s SETTING_NAME="SETTING_VAL" 来自蜘蛛类的 __init__() 方法

get_project_settings()允许我仅访问静态设置。

该文档解释了如何通过以下方式从管道设置新管道来访问这些自定义设置:

@classmethod
def from_crawler(cls, crawler):
    settings = crawler.settings
Run Code Online (Sandbox Code Playgroud)

但是有什么方法可以通过__init__()蜘蛛方法访问它们吗?

tom*_*mjn 5

只需使用settings.get例如

print(self.settings.get('SETTING_NAME'))
Run Code Online (Sandbox Code Playgroud)

将打印

SETTING_VAL
Run Code Online (Sandbox Code Playgroud)

如果您想访问蜘蛛中的某个设置,__init__您有几个选择。如果命令行选项只是一个spider参数,请使用-a而不是-s. 如果由于某种原因您需要访问蜘蛛中的实际设置,__init__那么您必须按照文档from_crawler classmethod中的描述覆盖。

这是一个例子:

import scrapy

class ArgsSpider(scrapy.Spider):
    name = "my_spider"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print('kwargs =', kwargs)

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = cls(
            *args,
            my_setting=crawler.settings.get("MY_SETTING"),
            **kwargs
        )
        spider._set_crawler(crawler)
        return spider
Run Code Online (Sandbox Code Playgroud)

使用eg运行scrapy runspider args_spider.py -s MY_SETTING=hello,world!,您将在字典中看到您的设置kwargs。当然你也可以通过这种方式获得其他设置