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

Requests ChunkedEncodingError问题排查及容错实现咨询

问题分析与解决方案

错误根源

这个requests.exceptions.ChunkedEncodingError大多源于网站端或网络层面,不是你的代码逻辑问题:

  • 可能是目标网站服务器在传输数据时意外中断了连接(比如服务器负载过高、临时限流)
  • 也可能是网络波动导致数据包丢失,使得请求的响应不完整
  • 另外,你每分钟请求一次,如果网站有反爬机制,也可能会故意切断连接来限制频繁请求

如何忽略错误并维持循环运行

完全可以通过异常捕获来处理这个问题,当出现这类错误时返回"0",让循环继续执行。修改后的代码示例如下:

def getInfo():
    url = websiteURL
    session = requests.Session()
    adapter = requests.adapters.HTTPAdapter(max_retries=10)
    session.mount('https://', adapter)
    try:
        r = session.get(url)
        if r.status_code == 200:
            soup = BeautifulSoup(r.text,"lxml")
            target_divs = soup.find_all('div', class_ = className)
            # 先判断列表是否有内容,避免索引越界
            if target_divs and len(target_divs[0]) > 0:
                span_text = target_divs[0].find('span').text
                values.append(span_text)
                return span_text  # 返回正常抓取到的内容
            else:
                return "0"  # 没找到目标元素时返回0
        else:
            return "0"  # 状态码非200时返回0
    except requests.exceptions.ChunkedEncodingError:
        print("遇到连接中断错误,返回0")
        return "0"
    except Exception as e:
        # 可以捕获其他可能的异常,比如解析错误、网络错误等
        print(f"发生其他错误: {str(e)}")
        return "0"

几点优化说明:

  • 用try-except包裹请求和解析的核心逻辑,精准捕获ChunkedEncodingError,同时用通用Exception兜底其他意外
  • 增加了对soup.find_all结果的非空判断,避免直接取[0]导致索引越界错误
  • 不同异常场景都返回"0",保证函数不会因报错终止,循环可以持续运行

另外,建议你可以适当增加请求间隔(比如从1分钟改成1分10秒),或者给请求加上headers模拟浏览器请求,降低被网站限流的概率,减少这类错误的发生。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:48:14