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

问题描述

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

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

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

文档解释了如何通过管道设置新管道来访问这些自定义设置:

@classmethod
def from_crawler(cls, crawler):
    settings = crawler.settings

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

标签: pythonscrapyscrapy-pipelinescrapy-settings

解决方案


只需使用settings.get例如

print(self.settings.get('SETTING_NAME'))

将打印

SETTING_VAL

如果您想访问蜘蛛中的设置,您__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

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


推荐阅读