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

使用Python http.client请求EPC API时出现ValueError报错求助

问题:用http.client调用EPC API无法转成DataFrame,加Accept头改用requests后正常

问题场景

一开始用Python的http.client库调用EPC API拿数据,得到的是类似HTML的bytes内容,试着转成DataFrame时直接报错:ValueError: No tables found。后来换成requests库,在请求头里加了Accept: application/json,代码就正常返回字典格式的数据了。

问题原因

EPC API默认会返回HTML格式的内容(比如API文档页或者错误提示),因为http.client默认没告诉服务器你想要啥格式的响应,服务器就返回了HTML而非你需要的JSON。而你用解析表格的方法(比如pd.read_html())去处理HTML,要是页面里没表格,自然就会抛出“找不到表格”的错误。

解决方法

不管用哪个HTTP库,核心是必须在请求头里明确指定要JSON格式的响应。

方案1:修正http.client的请求代码

import http.client
import json
import pandas as pd

# 建立连接
conn = http.client.HTTPSConnection("epc.opendatacommunities.org")
# 关键:添加Accept头指定JSON格式
headers = {"Accept": "application/json"}
# 替换成你实际要调用的API端点路径
conn.request("GET", "/api/domestic/...", headers=headers)

res = conn.getresponse()
data_bytes = res.read()
# 解析为JSON字典
json_data = json.loads(data_bytes)
# 转成DataFrame
df = pd.DataFrame(json_data)

方案2:用requests库的简洁写法

import requests
import pandas as pd

# 替换成实际API端点
url = "https://epc.opendatacommunities.org/api/domestic/..."
headers = {"Accept": "application/json"}

response = requests.get(url, headers=headers)
# 直接解析JSON响应
json_data = response.json()
df = pd.DataFrame(json_data)

关键提示

API接口通常支持多种响应格式,服务器会根据请求头里的Accept字段返回对应内容。如果不指定,服务器可能返回默认的HTML页面,导致后续解析失败。所以调用API时,一定要根据文档要求设置正确的请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:01:10