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