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
相关产品推荐
相关产品推荐

