scrapy中的from_crawler和from_settings方法
摘要:scrapy中from_crawler和from_settings从settings.py中获取参数。
从seetings.py中获取配置参数
方法一:
from scrapy import settings
from scrapy.settings import XXX
方法二:
@classmethod
def from_crawler(cls, crawler):
server = crawler.settings.get('SERVER')
# FIXME: for now, stats are only supported from this constructor
return cls(server)
接着,只要在__init__方法中接收这些参数就可以了。
def __init__(self, server):
self.server = server
而在一些官方的组件的源码中会这样使用,不过这看起来有点多此一举
@classmethod
def from_settings(cls, settings):
server = settings.get('SERVER')
return cls(server)
@classmethod
def from_crawler(cls, crawler):
# FIXME: for now, stats are only supported from this constructor
return cls.from_settings(crawler.settings)
from_crawler和from_settings不是所有的类都可以使用这个类方法。只有像插件,中间件,信号管理器和项目管道等这些组件才能使用这个类方法来导入配置,如果是自己写的spider或者自定义文件并没有,需要使用如下方法导入:
from scrapy.utils.project import get_project_settings
settings = get_project_settings()
host = settings.get('MYSQL_HOST')
这里的settings就是包含settings.py的所有配置的字典了。
实现原理
class A(object):
def __init__(self, canshu1, canshu2):
self.canshu1= canshu1
self.canshu2= canshu2
def foo1(self):
print ("Hello",self.canshu1)
def foo2(self):
print ("hello",self.canshu2)
@classmethod
def from_crawler(cls):
return cls(
canshu1="123",
canshu2="456"
)
大概就是检测spider类有没有from_crawler,有的话就return一个cls()的实例化对象,产生实例化对象后会自动调__init__方法。
更多参考
关于settings.py的更多参数说明,以及from_crawler的调用原理,参考:
scrapy配置参数(settings.py)
pipeline - 风不再来 - 博客园
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
A类中的foo2方法的参数写错了 , self
已更改