Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy 什么';“这是最简单的方法”;“设置配置文件”;用刮痧?_Scrapy - Fatal编程技术网

Scrapy 什么';“这是最简单的方法”;“设置配置文件”;用刮痧?

Scrapy 什么';“这是最简单的方法”;“设置配置文件”;用刮痧?,scrapy,Scrapy,Scrapy从settings.py中选择设置(也有默认设置、项目设置和每蜘蛛设置)。我正在寻找的是能够有多个带有设置的文件,并且能够在快速启动爬行器时在它们之间切换。如果文件之间有一些继承,那也太棒了 如果您从Java世界了解Spring Boot,那么就有了配置文件的概念。您有application.settings文件和基本设置。然后您可以有application-dev.settings和application-prod.settings。如果您使用选项-Dspring.profiles

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_模块并在my dev和prod模块中导入基本设置文件。你还有其他的方法吗

在我的例子中,启动线看起来像:

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

我相信
SCRAPY\u设置\u模块
是最好的方法


或者,由于设置模块是Python脚本,因此可以从
settings.py
中动态更改设置。我见过这样做,例如,自动检测爬行器是在本地机器上运行还是在Scrapyd服务器上运行,并在运行时相应地调整设置。

我相信
SCRAPY\u设置\u模块
是最好的方法


或者,由于设置模块是Python脚本,因此可以从
settings.py
中动态更改设置。我见过这样做,例如,自动检测爬行器是在本地机器上运行还是在Scrapyd服务器上运行,并在运行时相应地调整设置。

首先,如果只更改一个或两个值,那么使用单个动态
settings.py
(如中所述)会更简单

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

然后运行一个特定的:

SCRAPY_PROJECT=prod scrapy crawl myspider
SCRAPY_PROJECT=dev scrapy crawl myspider
如果不指定
SCRAPY\u项目
,它将使用
默认值


是的,您可以从设置文件继承。将
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()中经常使用的技巧。

首先,如果您只想更改一个或两个值,那么使用单个动态
settings.py将更简单(如中所述)

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

然后运行一个特定的:

SCRAPY_PROJECT=prod scrapy crawl myspider
SCRAPY_PROJECT=dev scrapy crawl myspider
如果不指定
SCRAPY\u项目
,它将使用
默认值


是的,您可以从设置文件继承。将
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()中经常使用的技巧。

回答得很好!正是我要找的!非常感谢你!回答得很好!正是我要找的!非常感谢你!非常感谢你!这是一个我没想到的好主意。非常感谢!这是一个我没有想到的好主意。