如何访问settings.py中的scrapy设置从项目管道。 该文件提到它可以通过扩展爬虫访问,但是我看不出如何访问履带的管道。
Answer 1:
访问您的Scrapy设置(所记载的方法settings.py
从内部) your_spider.py
很简单。 所有其他的答案实在是太复杂了。 这样做的原因是Scrapy文档的维护很差,许多最近的更新与变化相结合。 无论是“设置”文档中的“ 如何访问设置 ”,也不是在“设置API”有他们不屑给任何可行的例子。 下面是一个例子,如何让你的当前USER_AGENT字符串。
只需添加以下行your_spider.py
:
# To get your settings from (settings.py):
from scrapy.utils.project import get_project_settings
...
class YourSpider(BaseSpider):
...
def parse(self, response):
...
settings = get_project_settings()
print "Your USER_AGENT is:\n%s" % (settings.get('USER_AGENT'))
...
正如你所看到的,就没有必要使用@classmethod
或重新定义from_crawler()
或__init__()
函数。 希望这可以帮助。
PS。 我仍然不知道为什么使用from scrapy.settings import Settings
不相同的方式工作,因为这将是进口的更明显的选择?
Answer 2:
好了,在文档http://doc.scrapy.org/en/latest/topics/extensions.html说,
主入口点Scrapy延伸(这也包括中间件和管道)是接收履带实例,它是控制Scrapy履带主被摄体的from_crawler类方法。 通过该对象可以访问设置,信号,统计数据,也控制了履带的行为,如果你的扩展需要这样的东西。
所以,那么你可以有一个函数来获取的设置。
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
my_setting = settings.get("MY_SETTING")
return cls(my_setting)
履带式引擎,然后调用与管道的初始化函数my_setting
,就像这样:
def __init__(self, my_setting):
self.my_setting = my_setting
等功能可以访问它self.my_setting
,符合市场预期。
另外 ,在from_crawler()
函数,你可以通过crawler.settings
反对__init__()
从管线需要,而不是拉他们全部在构造函数中,然后访问设置。
Answer 3:
正确的答案是:这要看在管道您要访问的设置。
avaleske已经回答了,如果你想你的管道的外部访问设置process_item
方法,但它很可能这就是你想要的设置,因此有作为蜘蛛实例本身被传递作为参数更简单的方法。
class PipelineX(object):
def process_item(self, item, spider):
wanted_setting = spider.settings.get('WANTED_SETTING')
Answer 4:
项目结构是非常平坦的,为什么不:
# pipeline.py
from myproject import settings