not*_*bit 28
settings.py从内部访问Scrapy设置(如定义)的方法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'))
...
Run Code Online (Sandbox Code Playgroud)
如您所见,无需使用@classmethod或重新定义from_crawler()或__init__()功能.希望这可以帮助.
PS.我仍然不确定为什么使用from scrapy.settings import Settings不会以相同的方式工作,因为它将是更明显的导入选择?
ava*_*ske 25
好的,所以http://doc.scrapy.org/en/latest/topics/extensions.html上的文档说明了这一点
Scrapy扩展(包括中间件和管道)的主要入口点是from_crawler类方法,它接收一个Crawler实例,它是控制Scrapy搜寻器的主要对象.通过该对象,您可以访问设置,信号,统计信息,还可以控制爬虫行为,如果您的扩展需要这样的话.
那么你可以有一个函数来获取设置.
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
my_setting = settings.get("MY_SETTING")
return cls(my_setting)
Run Code Online (Sandbox Code Playgroud)
然后,爬虫引擎调用管道的init函数my_setting,如下所示:
def __init__(self, my_setting):
self.my_setting = my_setting
Run Code Online (Sandbox Code Playgroud)
self.my_setting正如预期的那样,其他功能可以访问它.
或者,在from_crawler()函数中,您可以将crawler.settings对象传递给__init__(),然后根据需要从管道访问设置,而不是在构造函数中将它们全部拉出.
Dar*_*ody 19
正确答案是:它取决于您希望访问设置的管道中的哪个位置.
avaleske已回答好像您想要访问管道process_item方法之外的设置,但很可能这是您需要设置的地方,因此当Spider实例本身作为参数传入时,有一种更简单的方法.
class PipelineX(object):
def process_item(self, item, spider):
wanted_setting = spider.settings.get('WANTED_SETTING')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15527 次 |
| 最近记录: |