You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scrapy爬虫出现抓取错误时自动停止运行?

Scrapy异常自动停止实现方案

方案1:使用内置CloseSpider扩展(快速配置)

Scrapy自带的官方扩展可直接通过配置触发自动停止,适配请求失败类场景:

  • 在项目settings.py中添加如下配置即可生效:
    # 累计出现N次请求错误后自动停止,可自定义数值
    CLOSESPIDER_ERRORCOUNT = 3
    
  • 也可以启动时直接传参临时生效,命令如下:
    scrapy crawl <spider_name> -s CLOSESPIDER_ERRORCOUNT=3

方案2:自定义逻辑(适配抓取不到目标元素的场景)

如果需要判断元素提取是否有效,需在爬虫代码中添加判断逻辑,调用引擎接口直接停止爬虫:

请求失败时自动停止

给请求添加errback错误回调,触发异常时直接停止:

import scrapy

class DemoSpider(scrapy.Spider):
    name = "demo"
    def start_requests(self):
        yield scrapy.Request(
            url="目标URL",
            callback=self.parse,
            errback=self.handle_error
        )
    
    def handle_error(self, failure):
        self.logger.error(f"请求出错:{repr(failure)}")
        # 直接停止爬虫
        self.crawler.engine.close_spider(self, reason="请求异常")

未抓取到目标元素时自动停止

在解析回调中加提取结果判断,无有效结果时停止:

def parse(self, response):
    # 提取目标元素,此处可替换为你自己的提取逻辑
    target_items = response.xpath("//div[@class='target']/text()").getall()
    if not target_items:
        self.logger.error("未提取到任何目标元素,自动停止")
        self.crawler.engine.close_spider(self, reason="无有效抓取结果")
    # 正常逻辑处理
    for item in target_items:
        yield {"content": item}

小提示:启动命令保持原有写法即可,注意替换正确的爬虫名称:scrapy crawl <spider_name>

内容的提问来源于stack exchange,提问作者Mohsen Mahmoodzadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:36:03