Python 在关闭Scrapy spider之前提出最后请求

Python 在关闭Scrapy spider之前提出最后请求,python,scrapy,Python,Scrapy,问题很简单,有一个蜘蛛登录到一个网站,抓取一些数据,然后退出。所需的行为是登录、抓取数据,然后注销 硬编码是不可能的,因为大约有60个spider,它们都是从BaseSpider继承的 我尝试过使用信号,并在spider\u idle信号中添加了一个注销功能,该功能只需向每个spider需要提供的注销URL发送一个请求,但我无法让它工作,注销功能从未被调用,我一直无法找出原因 代码如下: @classmethod 来自_爬虫程序的def(cls、爬虫程序、*args、**kwargs): spi

问题很简单,有一个蜘蛛登录到一个网站,抓取一些数据,然后退出。所需的行为是登录、抓取数据,然后注销

硬编码是不可能的,因为大约有60个spider,它们都是从BaseSpider继承的

我尝试过使用信号,并在
spider\u idle
信号中添加了一个注销功能,该功能只需向每个spider需要提供的注销URL发送一个请求,但我无法让它工作,注销功能从未被调用,我一直无法找出原因

代码如下:

@classmethod
来自_爬虫程序的def(cls、爬虫程序、*args、**kwargs):
spider=super(BaseSpider,cls)。来自爬虫程序(爬虫程序,*args,**kwargs)
crawler.signals.connect(spider.spider\u idle,signal=signals.spider\u idle)
def卡盘_怠速(自身、卡盘):
如果未自行注销,请执行以下操作:
self.crawler.engine.crawl(请求(self.logout\u url,callback=self.logout),spider)
def注销(自我,响应):
self.logged_out=True

我不明白这为什么行不通。据我所知,当队列中没有更多请求时,会调用
spider\u idle
信号。

我使用Scrapy多年,最后会出现类似于您的场景

实现目标的唯一解决方案是在
spider\u closed
方法中使用Python的请求库

spider\u idle
etc没有帮助