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

pandas.read_html读取网页报no tables found 404错误如何修复

报错根因

pandas.read_html()仅能解析页面源码中静态存在的<table>标签,无法执行页面JavaScript完成动态内容渲染,结合CoinMarketCap的站点规则,触发报错的直接原因有两个:

  1. pandas发起请求时默认携带的User-Agent带有爬虫标识,会被站点反爬机制识别,直接返回404/403响应,不返回正常页面内容
  2. 你使用的旧版历史数据URL早已完成改版,当前页面的所有行情数据都由前端JS异步拉取后渲染,初始返回的HTML源码中不存在包含行情数据的表格标签,自然触发ValueError: no tables found报错。
解决步骤
  • 替换原有直接读取HTML页面的逻辑,改用结构化接口拉取数据,稳定性远高于解析HTML,同时不受前端动态渲染影响。拉取时添加正常浏览器的请求头,绕过基础反爬校验。
  • 修正后可直接运行的完整代码:
from math import pi
import pandas as pd
import requests
from bokeh.plotting import figure, show, output_file

# 构造合法浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 拉取指定时间范围的比特币历史行情
url = "https://api.coinmarketcap.com/data-api/v3/cryptocurrency/historical"
params = {
    "id": 1,
    "convertId": 2781,
    "timeStart": "2019-02-20",
    "timeEnd": "2019-03-20"
}
resp = requests.get(url, headers=headers, params=params)
resp_data = resp.json()

# 解析结构化数据为DataFrame
df = pd.DataFrame([item["quote"] for item in resp_data["data"]["quotes"]])
df["Date"] = pd.to_datetime(df["timestamp"])
df.rename(columns={"open": "Open", "high": "High", "low": "Low", "close": "Close"}, inplace=True)
df = df.sort_values("Date").reset_index(drop=True)

inc = df.Close > df.Open
dec = df.Open > df.Close
w = 12 * 60 * 60 * 1000

tools = "pan,wheel_zoom,box_zoom,reset,save"
p = figure(x_axis_type="datetime", tools=tools, plot_width=1200, title="Bitcoin Candlesticks")
p.xaxis.major_label_orientation = pi / 4
p.grid.grid_line_alpha = 0.3

p.segment(df.Date, df.High, df.Date, df.Low, color="black")
p.vbar(df.Date[inc], w, df.Open[inc], df.Close[inc], fill_color="#D5E1DD", line_color="black")
p.vbar(df.Date[dec], w, df.Open[dec], df.Close[dec], fill_color="#F2583E", line_color="black")

output_file("bitcoin.html", title="Bitcoin Candlesticks")
show(p)
  • 若仅做单次临时测试,也可手动在浏览器中打开目标URL,等页面完全加载后将网页保存为本地HTML文件,再调用pandas.read_html("本地文件路径.html")读取本地文件解析表格,同样可以绕过动态渲染和反爬限制,但该方法不适用自动化、批量拉取数据的场景。
  • 若调整请求逻辑后依然返回404,优先排查本地网络连通性,部分网络环境下无法正常访问CoinMarketCap服务,会直接返回404页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:24:21