【问题标题】:How can I make scrapy crawl break and exit when encountering the first exception?遇到第一个异常时,如何使scrapy crawl 中断并退出?
【发布时间】:2012-03-01 22:06:50
【问题描述】:

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

有什么建议吗?

【问题讨论】:

    标签: python exception scrapy


    【解决方案1】:

    在蜘蛛中,你可以抛出 CloseSpider 异常。

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

    对于其他(中间件、管道等),您可以手动调用 close_spider,如 akhter 所述。

    【讨论】:

    • 在 scrapy 中捕获蜘蛛异常的理想位置是什么?谢谢
    【解决方案2】:

    从0.11开始,有CLOSESPIDER_ERRORCOUNT

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

    如果设置为1,蜘蛛将在第一个异常时关闭。

    【讨论】:

    • 谢谢!我遇到了同样的问题,这对我有用。
    【解决方案3】:

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

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

    Suggested Reading

    Suggested Reading

    最坏的解决方案是

    import sys
    
    sys.exit("SHUT DOWN EVERYTHING!")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多