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

使用pd.read_html抓取CMoney网页表格报错No tables found 求解决办法

问题根因
  • pd.read_html()仅能解析静态HTML文本中直接包含的<table>标签元素,你当前访问的目标站点表格由前端JavaScript动态渲染生成,requests.get()仅能获取未执行JS的初始页面源码,源码中不存在对应表格结构,因此触发报错。
  • 你收到的英文报错ValueError: No tables found的中文含义为:值错误:未找到表格
  • 你此前更换其他网站链接可正常运行,是因为其他站点的表格为静态写入HTML源码的结构,不需要JS动态生成。
可行修复方案

方案1:使用动态渲染模拟工具加载完整页面(适配性最高)

使用Selenium、Playwright等工具模拟浏览器运行,等页面JS执行完毕、表格渲染完成后再提取页面源码传给pd.read_html(),示例代码如下:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = "https://www.cmoney.tw/etf/e210.aspx?key=0050"
driver.get(url)

# 等待表格元素加载完成,最长等待时长为10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "table"))
)

# 获取渲染完成的完整页面源码
page_source = driver.page_source
# 关闭浏览器
driver.quit()

# 解析表格内容
listed = pd.read_html(page_source)[0]
listed.columns = listed.iloc[0,:]
listed = listed[["標的代號","標的名稱"]]
listed = listed.iloc[1:]
print(listed)

依赖安装说明:执行pip install selenium webdriver-manager即可安装所需依赖包。

方案2:直接调用后端数据接口

通过浏览器开发者工具的「网络」面板,筛选Fetch/XHR类型的请求,找到站点加载成分股数据对应的后端API,直接向接口发起请求获取结构化的JSON数据,该方法不需要启动浏览器,运行效率更高,也不需要解析HTML表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:15:03