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

数据采集时出现Connection Error,如何实现断连重连续采?

解决爬虫ConnectionError断点重试问题

这个问题我爬取大批量页面时太熟悉了!出现ConnectionError: ('Connection aborted.', OSError("(10054, 'WSAECONNRESET')"))通常有两种原因:要么是目标网站的反爬机制检测到频繁请求,主动断开了连接;要么是网络波动导致连接意外重置。咱们可以通过异常捕获+本地重试+断点续爬的思路来解决,直接上修改后的代码和解释:

基础实现:异常捕获+重试机制

import requests
from bs4 import BeautifulSoup
import time

url = "https://www.example.com"
# 可配置的重试参数
MAX_RETRIES = 3  # 单个页面最大重试次数
WAIT_SECONDS = 5  # 每次重试前等待的秒数

for page in range(0, 951, 50):
    new_url = url + str(page) + "&pagingSize=50"
    is_success = False
    retry_count = 0
    
    # 循环重试当前页面,直到成功或达到最大重试次数
    while not is_success and retry_count < MAX_RETRIES:
        try:
            # 发送请求,这里建议加上请求头模拟浏览器,减少被拦截
            headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
            }
            r = requests.get(new_url, headers=headers)
            # 检查HTTP状态码,非200直接抛出异常
            r.raise_for_status()
            
            # 解析页面
            source = BeautifulSoup(r.content, "html.parser")
            content = source.select('tr.searchResultsItem:not(.nativeAd, .classicNativeAd)')
            print(content)
            
            # 标记当前页面爬取成功,进入下一页
            is_success = True
            
        except requests.exceptions.ConnectionError as e:
            retry_count += 1
            print(f"页面 {page} 连接出错!第 {retry_count} 次重试,等待 {WAIT_SECONDS} 秒...")
            print(f"错误详情: {e}")
            time.sleep(WAIT_SECONDS)
            
        except requests.exceptions.HTTPError as e:
            print(f"页面 {page} HTTP错误: {e}")
            # 如果是403/429这类反爬状态码,延长等待时间后跳过
            time.sleep(WAIT_SECONDS * 2)
            break
            
    # 如果重试多次仍失败,记录并跳过
    if not is_success:
        print(f"页面 {page} 重试 {MAX_RETRIES} 次仍失败,已跳过")

关键细节解释

  • 重试逻辑:用while循环针对单个页面做重试,避免因为一次网络波动就中断整个爬取任务
  • 异常分类处理:区分ConnectionError(连接问题)和HTTPError(状态码问题),分别处理
  • 请求头模拟:加上User-Agent伪装成浏览器,很多网站会拦截无请求头的爬虫
  • 失败兜底:如果重试多次都失败,直接跳过当前页面,保证后续页面能继续爬取

进阶优化建议

如果想让爬虫更稳定,还可以加这些功能:

  • 随机等待时间:用random.randint(3, 8)替代固定的WAIT_SECONDS,避免固定请求间隔被反爬识别
  • 代理IP池:如果网站封了你的IP,用代理IP轮换请求
  • 断点续爬记录:把已经爬取成功的页码保存到本地文件,下次启动时从最后成功的页码开始,不用从头爬
  • 数据持久化:把爬取到的content保存到CSV/数据库,避免程序崩溃丢失数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:08:09