【发布时间】:2012-03-01 22:06:50
【问题描述】:
出于开发目的,我想在第一个异常(在蜘蛛或管道中)发生后立即停止所有抓取活动。
有什么建议吗?
【问题讨论】:
出于开发目的,我想在第一个异常(在蜘蛛或管道中)发生后立即停止所有抓取活动。
有什么建议吗?
【问题讨论】:
在蜘蛛中,你可以抛出 CloseSpider 异常。
def parse_page(self, response):
if 'Bandwidth exceeded' in response.body:
raise CloseSpider('bandwidth_exceeded')
对于其他(中间件、管道等),您可以手动调用 close_spider,如 akhter 所述。
【讨论】:
从0.11开始,有CLOSESPIDER_ERRORCOUNT:
一个整数,它指定在关闭蜘蛛之前接收的最大错误数。如果蜘蛛产生的错误数量超过该数量,它将以 closespider_errorcount 的原因关闭。如果为零(或未设置),则蜘蛛不会因错误数而关闭。
如果设置为1,蜘蛛将在第一个异常时关闭。
【讨论】:
这完全取决于您的业务逻辑。但这对你有用
crawler.engine.close_spider(self, 'log message')
最坏的解决方案是
import sys
sys.exit("SHUT DOWN EVERYTHING!")
【讨论】: