我无法理解这些功能.如果我继承了Spider或者CrawlSpider,我应该覆盖那些函数.如果没有,那么为什么呢?
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(CrawlSpider, cls).from_crawler(crawler, *args, **kwargs)
spider._follow_links = crawler.settings.getbool(
'CRAWLSPIDER_FOLLOW_LINKS', True)
return spider
def set_crawler(self, crawler):
super(CrawlSpider, self).set_crawler(crawler)
self._follow_links = crawler.settings.getbool(
'CRAWLSPIDER_FOLLOW_LINKS', True)
Run Code Online (Sandbox Code Playgroud)
通常您不需要覆盖这些功能,但这取决于您想要做什么.
该from_crawler方法(使用@classmethod装饰器)是一个工厂方法,Scrapy将使用它来实例化您添加它的对象(蜘蛛,扩展,中间件等).
它通常用于获取一个引用crawler对象(保存引用类似对象settings,stats等),然后决定将其作为参数传递到正在创建或属性集给它的对象.
在您粘贴的特定示例中,它用于从CRAWLSPIDER_FOLLOW_LINKS设置中读取值并将其设置_follow_links为蜘蛛中的属性.
您可以在此扩展中看到另一个使用from_crawler方法的简单示例,该示例使用该crawler对象获取设置的值并将其作为参数传递给扩展并将某些信号连接到某些方法.
该set_crawler方法已在最新的Scrapy版本中弃用,应避免使用.