出于开发目的,我想在第一个异常(在蜘蛛或管道中)发生时立即停止所有scrapy爬行活动。
有什么建议吗?
答案 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')
最糟糕的解决方案是
import sys
sys.exit("SHUT DOWN EVERYTHING!")