跟随帖子Reading settings in spider scrapy,我已成功将设置加载到middlewares.py
中。
from scrapy.utils.project import get_project_settings
settings=get_project_settings()
我想知道为什么可以加载设置。
import scrapy.utils
dir(scrapy.utils)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'datatypes', 'decorators', 'deprecate', 'gz', 'iterators', 'misc', 'python', 'response', 'sitemap', 'spider', 'trackref', 'url']
dir(scrapy.utils.project)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'scrapy.utils' has no attribute 'project'
模块'scrapy.utils'没有属性'project',为什么scrapy.utils.project
可以加载get_project_settings
?
答案 0 :(得分:1)
Scrapy是一个用于编写Web爬虫的应用程序框架,该爬虫对网站进行爬网并从中提取数据。 Scrapy utils只是用于加载程序,扩展等的一组实用程序。
如果您在Scrapy项目中,则可以使用一些其他帮助程序将这些组件导入项目中。您可以自动导入并使用 get_project_settings 来获取包含项目设置的Settings实例。
就是这样。
答案 1 :(得分:0)
如果您查看utils.project.py on github,则会发现:
from scrapy.settings import Settings
这意味着设置将被导入并且可用于scrapy.utils.project
模块。具体到您的问题:函数get_project_settings
是scrapy.utils.project
的一部分,因此根据该定义,它对scrapy.utils.project
可用。 Scrapy.utils
不需要具有设置属性即可让scrapy.utils.project
进行工作,因为它可以导入并定义执行工作所需的任何内容。