python - Scrapy:如何从蜘蛛类的 __init__() 方法访问自定义的 CLI 传递设置?
问题描述
我需要使用以下命令访问从 CLI 传递的自定义设置:
-s SETTING_NAME="SETTING_VAL"
来自蜘蛛类的 __init__() 方法。
get_project_settings()
允许我仅访问静态设置。
文档解释了如何通过管道设置新管道来访问这些自定义设置:
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
但是有什么方法可以从__init__()
蜘蛛方法中访问它们吗?
解决方案
只需使用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!
您将在kwargs
dict 中看到您的设置。您当然也可以通过这种方式获得其他设置
推荐阅读
- ruby-on-rails - 尝试为我的项目运行测试时,我的堆栈级别一直太深
- java - 使用 JPA 进行 SUM 运算
- angular - 将参数传递给 ngOnChanges?
- elasticsearch - 使用 ServiceAccount 到 IAM 角色映射在 Kubernetes 中运行 Elasticsearch 时出现 S3 连接问题
- python - 为什么字典没有显示受影响的值?
- python - 如何在 QGridLayout 中动态创建 Qpushbutton?
- python - 使用 Prophet 预测倒置时间序列
- codenameone - 即使容器包含 SpanButton,如何使容器可拖动?
- mysql - 探索 json null 和 "" 以及 hibernate null 和 "" 以及 MySql/Postgres null 和 ""。有什么好的方法吗?
- javascript - 输入上的传递值索引不断变化?Vue