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

如何使用Scrapy检测HTTP错误状态码并导出至CSV?

解决Scrapy捕获非200状态码并导出CSV的问题

Scrapy默认仅会将状态码在200-300区间内的响应传递给parse方法,所以你只能获取到200状态码。要捕获404、502这类非成功状态码,需要做以下调整:

1. 允许爬虫接收指定非200状态码

在你的爬虫类中添加handle_httpstatus_list属性,列出你需要捕获的状态码;或者设置handle_httpstatus_all = True来接收所有状态码的响应:

import scrapy

class YourSpider(scrapy.Spider):
    name = 'your_spider'
    start_urls = ['http://example.com', 'http://example.com/nonexistent']
    # 捕获指定状态码
    handle_httpstatus_list = [404, 502, 403]
    # 或者捕获所有状态码
    # handle_httpstatus_all = True

    def parse(self, response):
        yield {
            'URL': response.url,
            'Status': response.status
        }

这样所有符合handle_httpstatus_list的响应都会进入parse方法,你就能正常获取对应的状态码并导出到CSV了。

2. 处理请求失败(无响应的情况)

如果遇到DNS解析失败、连接超时这类没有返回响应的错误,需要通过errback函数来捕获:

import scrapy
from twisted.python.failure import Failure

class YourSpider(scrapy.Spider):
    name = 'your_spider'
    start_urls = ['http://invalid-domain.example', 'http://example.com']
    handle_httpstatus_list = [404, 502]

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(
                url,
                callback=self.parse,
                errback=self.handle_error
            )

    def parse(self, response):
        yield {
            'URL': response.url,
            'Status': response.status
        }

    def handle_error(self, failure):
        # 获取请求的URL
        url = failure.request.url
        # 提取错误信息,比如超时、DNS失败等
        error_msg = str(failure.value)
        # 自定义状态标识
        yield {
            'URL': url,
            'Status': f'ERROR: {error_msg}'
        }

运行爬虫时,执行scrapy crawl your_spider -o status_results.csv就能将所有URL的状态信息导出到CSV文件。

内容的提问来源于stack exchange,提问作者Raisul Islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:35:34