如何在Pipeline.close_spider()方法中确定Scrapy是否遇到错误?

问题描述 投票:0回答:1

我有一个Scrapy蜘蛛和管道设置。

My Spider从网站中提取数据,我的Pipeline的process_item()method将提取的数据插入到临时数据库表中。

最后,在Pipeline的close_spider()方法中,我在临时数据库表上运行一些错误检查,如果事情看起来没问题,那么我将临时表永久化。

但是,如果Scrapy在调用Pipeline的close_spider()方法之前遇到异常,那么提取的数据可能不完整。

有没有办法检查Scrapy是否在Pipeline的close_spider()方法中遇到异常?如果有错误(表明提取的数据可能不完整),我不想让临时表永久存在。

我正在使用CloseSpider扩展,CLOSESPIDER_ERRORCOUNT设置为1以在第一个错误时关闭Spider。但是,我还没想出如何在Pipeline的close_spider()方法中区分正常关闭和错误关闭。

scrapy scrapy-pipeline
1个回答
0
投票

我能够使用Scrapy中的信号来做到这一点。我在这里发布答案以防其他人遇到此问题。

我注册了捕捉spider_error信号,并在蜘蛛本身提供了一个回调处理程序。

回调在蜘蛛上设置了一个标志,表示它遇到了错误。

在管道的close_spider()方法中,我检查了蜘蛛上是否设置了错误标志,以区分正常关闭和错误关闭。

© www.soinside.com 2019 - 2024. All rights reserved.