【发布时间】:2019-06-09 21:22:09
【问题描述】:
问题很简单,有一个蜘蛛登录到一个网站,爬取一些数据然后退出。所需的行为是登录、爬取数据然后注销。
硬编码是不可能的,因为大约有 60 个蜘蛛,它们都是从 BaseSpider 继承的。
我尝试使用信号并向spider_idle 信号添加注销功能,该功能将简单地向每个蜘蛛需要提供的注销 URL 发送请求,但我无法让它工作,注销功能从未被调用,我无法弄清楚为什么不?
代码如下:
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(BaseSpider, cls).from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.spider_idle, signal=signals.spider_idle)
def spider_idle(self, spider):
if not self.logged_out:
self.crawler.engine.crawl(Request(self.logout_url, callback=self.logout), spider)
def logout(self, response):
self.logged_out = True
我不明白为什么这不起作用。据我了解,spider_idle 信号在队列中没有更多请求/蜘蛛完成时被调用。
【问题讨论】: