我有一个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中的信号来做到这一点。我在这里发布答案以防其他人遇到此问题。
我注册了捕捉spider_error
信号,并在蜘蛛本身提供了一个回调处理程序。
回调在蜘蛛上设置了一个标志,表示它遇到了错误。
在管道的close_spider()
方法中,我检查了蜘蛛上是否设置了错误标志,以区分正常关闭和错误关闭。