1

我有一个 Scrapy spider 和 Pipeline 设置。

我的 Spider 从网站中提取数据,我的 Pipelineprocess_item()方法将提取的数据插入到临时数据库表中。

最后,在 Pipeline 的close_spider()方法中,我对临时数据库表运行了一些错误检查,如果一切正常,那么我将临时表设为永久。

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

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

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

4

1 回答 1

1

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

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

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

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

于 2017-10-27T16:16:42.500 回答