如何在遇到第一个异常时进行scrapy抓取并退出?

时间:2012-03-01 22:06:51

标签: python exception scrapy

出于开发目的,我想在第一个异常(在蜘蛛或管道中)发生时立即停止所有scrapy爬行活动。

有什么建议吗?

3 个答案:

答案 0 :(得分:13)

从0.11开始,有CLOSESPIDER_ERRORCOUNT

  

一个整数,指定关闭spider之前要接收的最大错误数。如果蜘蛛生成的错误数超过该数量,则将使用closespider_errorcount原因关闭它。如果为零(或未设置),则蜘蛛不会被错误数量关闭。

如果设置为1,则蜘蛛将在第一个例外时关闭。

答案 1 :(得分:10)

在蜘蛛中,你可以抛出CloseSpider例外。

def parse_page(self, response):
    if 'Bandwidth exceeded' in response.body:
        raise CloseSpider('bandwidth_exceeded')

对于其他人(中间件,管道等),您可以手动拨打close_spider作为akhter提及。

答案 2 :(得分:3)

纯粹取决于您的业务逻辑。但这对你有用

crawler.engine.close_spider(self, 'log message')

Suggested Reading

Suggested Reading

最糟糕的解决方案是

import sys

sys.exit("SHUT DOWN EVERYTHING!")