gpt4 book ai didi

scrapy - 在 Scrapy 中拥有 "settings profiles"的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-04 14:47:58 25 4
gpt4 key购买 nike

Scrapy 从 settings.py 中获取设置(还有默认设置、项目设置、每个蜘蛛设置)。我正在寻找的是能够拥有多个带有设置的文件,并且能够在我快速启动蜘蛛时在它们之间切换。如果文件之间有一些继承,那也太棒了。

如果您从 Java 世界了解 Spring Boot,就会有一个配置文件的想法。您有包含基本设置的 application.settings 文件。然后您可以拥有 application-dev.settings 和 application-prod.settings。如果您使用选项 -Dspring.profiles.active=dev 运行应用程序,那么它将选择 application.settings 并在其上添加 application-dev.settings。这样您就可以并行维护多个配置并在它们之间快速切换。

我找到了一种不需要支持代码的 Scrapy 方法。方法是使用 SCRAPY_SETTINGS_MODULE 并在我的 dev 和 prod 模块中导入基本设置文件。您还使用其他方法吗?

在我的例子中,启动线如下所示:

export SCRAPY_SETTINGS_MODULE=projectname.profiles.dev && scrapy crawl myspider

最佳答案

首先,如果您只想更改一两个值,那么使用单个动态 settings.py 会更简单(如 Gallaecio's answer 中所述)。

但是,如果您真的需要单独的设置,还有一个更短的方法,即在 scrapy.cfg (docs) 中定义单独的“项目”:

[settings]
default = myproject.settings.dev
dev = myproject.settings.dev
prod = myproject.settings.prod

然后运行一个特定的:

SCRAPY_PROJECT=prod scrapy crawl myspider
SCRAPY_PROJECT=dev scrapy crawl myspider

如果您不指定 SCRAPY_PROJECT,它将使用 default


是的,您可以从设置文件继承。将您的 settings.py 文件替换为模块:

myproject/settings/__init__.py
myproject/settings/base.py
myproject/settings/dev.py
myproject/settings/prod.py

base.py 中,您可以完全拥有 settings.py 中的内容。然后在您添加的每个覆盖文件的顶部:

from .base import *

# Override settings in the same way as if they were declared in settings.py

通配符导入通常是一种不好的做法,但在这种情况下,因为它只是一个普通的 Python 文件,所以最终结果就是所有变量都可用。这是我们在 Django 中经常使用的技巧 (example)。

关于scrapy - 在 Scrapy 中拥有 "settings profiles"的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com