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

Python脚本访问离线网站报requests.exceptions.ConnectionError错误如何解决

错误原因

你遇到的requests.exceptions.ConnectionError: HTTPConnectionPool报错是目标站点离线、网络不通、域名解析失败等连接异常场景下,requests库抛出的未捕获异常,会直接终止整个脚本运行,导致后续的下载任务无法执行。

修复方案

核心是通过异常捕获机制处理连接失败场景,单个链接下载失败时仅跳过该任务、不影响整体运行,同时可以增加超时、重试逻辑提升脚本健壮性。

修改后的完整代码

# *- coding: utf-8 -*-
import requests
import os.path
from requests.exceptions import ConnectionError, Timeout, RequestException

# 可自定义配置:单个请求的超时时间(秒),请求失败最多重试次数
REQUEST_TIMEOUT = 10
MAX_RETRY = 2

def download_url(url):
    print("downloading: ", url)
    # 重试逻辑
    retry_count = 0
    while retry_count < MAX_RETRY:
        try:
            r = requests.get(url, stream=True, timeout=REQUEST_TIMEOUT)
            # 请求成功直接跳出重试循环
            break
        except (ConnectionError, Timeout) as e:
            retry_count += 1
            print(f"下载{url}失败,第{retry_count}次重试,错误信息:{str(e)}")
        except RequestException as e:
            # 其他请求类错误直接放弃当前链接
            print(f"下载{url}遇到未知请求错误,跳过该任务,错误信息:{str(e)}")
            return
    else:
        # 重试次数耗尽仍失败
        print(f"下载{url}重试{MAX_RETRY}次后仍失败,跳过该任务")
        return

    # 原有正常下载逻辑优化
    file_name_start_pos = url.rfind(".txt") + 1
    file_name = url[file_name_start_pos:]
 
    if r.status_code == requests.codes.ok:
        if not os.path.isfile("data_file.txt"):
            with open("data_file.txt","w") as f:
                pass
        
        with open("data_file.txt", 'ab') as f:
            f.write(bytes(f"\n\n----------- {file_name} -----------\n\n",'utf-8'))
            for data in r:
                f.write(data)
    else:
        print(f"下载{url}返回状态码异常:{r.status_code},跳过该任务")

download_url("https://wordpress.org/plugins/readme.txt")
download_url("https://wolfstudios.nl/readme.txt")
download_url("http://download.ni.com/support/softlib/visa/NI-VISA/17.0/Linux/README.txt")

核心改动说明

  • 新增了精确的异常捕获逻辑:分别处理连接错误、超时错误、其他未知请求错误,所有错误场景都不会终止脚本,只会跳过当前失败的下载任务
  • 新增了超时设置:避免请求长时间无响应卡住整个脚本
  • 新增了可选的重试机制:应对临时网络波动、站点瞬时不可用的场景,提升下载成功率
  • 新增了状态码异常判断:如果站点返回404、500等错误状态码时也会跳过,避免后续写入无效内容
  • 优化了文件创建逻辑:用with语句改写初始文件创建逻辑,避免文件操作资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:24:04