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

Anaconda环境pandas.read_html报HTTPError服务不可用如何解决

问题根因

该HTTPError: Service Temporarily Unavailable报错并非Anaconda环境损坏,也不是目标站点真的处于不可用状态:

  • ECB官网配置了反爬规则,会拦截请求头中User-Agent字段不符合常规浏览器特征的请求
  • Anaconda环境内置的urllib默认携带的User-Agent标识被该规则命中,直接返回503响应;标准Python环境的默认UA未被拦截,因此完全相同的代码可正常运行。
修复方案

方案1:自定义请求头+requests发起请求(最稳定,推荐)

直接给pd.read_html传入URL字符串时,请求头是urllib自动生成的无法灵活自定义,改用requests库构造带常规浏览器UA的请求,再将响应文本传入解析即可:

  1. 若环境未安装requests,在Anaconda Prompt执行安装命令:
    conda install requests
    
  2. 替换原有代码为如下内容:
    import pandas as pd
    import requests
    
    target_url = "https://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=120.EXR.D.CHF.EUR.SP00.A"
    # 模拟普通桌面浏览器的请求头
    request_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    }
    response = requests.get(target_url, headers=request_headers)
    response.raise_for_status() # 请求异常时主动抛出错误,避免静默失败
    tables = pd.read_html(response.text)
    

方案2:修改urllib全局请求头(无额外依赖)

如果不想引入第三方requests库,可以直接修改urllib的全局默认opener,替换默认UA,原有pd.read_html传URL的代码无需任何改动即可运行:

import pandas as pd
import urllib.request

# 构造自定义opener,替换UA为常规浏览器标识
custom_opener = urllib.request.build_opener()
custom_opener.addheaders = [
    ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")
]
# 注册为全局默认opener
urllib.request.install_opener(custom_opener)

# 原有代码无需修改
tables = pd.read_html("https://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=120.EXR.D.CHF.EUR.SP00.A")

临时方案:升级相关依赖

如果只是临时单次运行脚本,可以尝试升级pandas及解析依赖到最新版本,部分新版本pandas会调整默认请求的UA标识,可能绕过拦截:

conda update pandas lxml html5lib

注意:该方案稳定性差,站点反爬规则更新后可能再次失效,长期使用优先选择前两种显式指定请求头的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:57:31