为什么导入scrapy.utils.project可以加载设置?

时间:2019-08-23 03:12:31

标签: python scrapy

跟随帖子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

2 个答案:

答案 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_settingsscrapy.utils.project的一部分,因此根据该定义,它对scrapy.utils.project可用。 Scrapy.utils不需要具有设置属性即可让scrapy.utils.project进行工作,因为它可以导入并定义执行工作所需的任何内容。