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

如何将网站表格数据导出至CSV?代码报错“ValueError: No table found”

问题原因

之前能用的pd.read_html突然报错,核心原因是目标网站的页面结构变了——要么原来的标准HTML表格被替换成了非table标签的布局,要么表格数据改成了JavaScript动态加载,导致pandas直接抓不到静态HTML里的表格。

解决办法

方法1:用Selenium模拟浏览器抓动态内容

如果表格是JS加载的,就得先让浏览器渲染完页面再抓:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import datetime

# 配置无头模式,不用弹出浏览器窗口
chrome_options = Options()
chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)

try:
    url = 'https://www.comed.com/smart-energy/my-green-power-connection/developers-contractors/smaller-generators/interconnection-queue'
    driver.get(url)
    # 等10秒让页面加载完,时间可以自己调
    driver.implicitly_wait(10)
    # 抓渲染后的页面源码
    page_source = driver.page_source
    # 再用pandas解析表格
    tables = pd.read_html(page_source)
    if tables:
        queue_pd = tables[0]
        # 导出带当前日期的CSV
        queue_pd.to_csv(f'interconnection_queue_{datetime.datetime.now().strftime("%Y%m%d")}.csv', index=False)
        print("导出成功")
    else:
        print("页面里没找到表格")
finally:
    # 用完关掉浏览器
    driver.quit()

先装依赖:pip install selenium,还要对应装Chrome浏览器的驱动(ChromeDriver)。

方法2:直接抓网站的API接口(更高效)

打开浏览器按F12进开发者工具,切到「网络」标签,刷新页面,找XHR/Fetch类型的请求,里面大概率有直接返回表格数据的API。找到后直接用requests调用:

import pandas as pd
import requests
import datetime

# 替换成你找到的API地址
api_url = "这里填找到的API接口URL"
resp = requests.get(api_url)
if resp.status_code == 200:
    data = resp.json()
    # 按API返回的JSON结构转成DataFrame
    queue_pd = pd.DataFrame(data)
    queue_pd.to_csv(f'interconnection_queue_{datetime.datetime.now().strftime("%Y%m%d")}.csv', index=False)
else:
    print("API请求失败")

这种方法速度快,不用模拟浏览器,但得自己找对接口。

方法3:用BeautifulSoup手动解析非标准表格

如果页面用div之类的标签模拟表格,pd.read_html就失效了,得手动提取:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import datetime

url = 'https://www.comed.com/smart-energy/my-green-power-connection/developers-contractors/smaller-generators/interconnection-queue'
resp = requests.get(url)
soup = BeautifulSoup(resp.text, 'html.parser')

# 这里要根据页面实际结构改选择器,比如找包裹表格的div类名
table_rows = soup.select('div.table-wrapper div.table-row')
data = []
for row in table_rows:
    # 提取每行的单元格文本
    cells = row.select('div.table-cell')
    row_data = [cell.get_text(strip=True) for cell in cells]
    data.append(row_data)

if data:
    # 假设第一行是表头
    headers = data[0]
    queue_pd = pd.DataFrame(data[1:], columns=headers)
    queue_pd.to_csv(f'interconnection_queue_{datetime.datetime.now().strftime("%Y%m%d")}.csv', index=False)
else:
    print("没提取到表格数据")

这个方法需要你对着页面源码调整CSS选择器,匹配当前的表格结构。

先做这几步排查
  • 直接打开目标网址,确认表格还在不在
  • 右键看页面源代码,搜<table>标签,确认有没有标准表格
  • 要是源码里没table,那肯定是动态加载的,优先用方法1或2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:43:48