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

Python使用pandas.read_html爬取表格报ValueError: No tables found求助

报错核心原因

该报错不属于BeautifulSoup的错误,是pandas read_html方法的解析规则与传入内容不匹配导致的,两类场景的修复方案如下:


第一个场景修复

错误点:你传入了#nav-yesterday整个div节点的序列化内容,多余的DOM结构会干扰pandas的表格识别逻辑,且未携带请求头容易触发站点反爬,返回无有效表格的异常页面。
修复后代码:

import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup
from datetime import date

today = date.today()
caption = 'Coronavirus Data {}'.format(today)

url = 'https://www.worldometers.info/coronavirus/'
# 模拟浏览器请求头,避免反爬
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"
}
r = requests.get(url, headers=headers)
html_doc = r.text
soup = BeautifulSoup(html_doc, "lxml")
yesterday = soup.find('div', attrs={'id':'nav-yesterday'})
# 直接定位目标table节点后再传入pandas
target_table = yesterday.find("table")
dfs = pd.read_html(str(target_table), flavor = 'bs4')[0]
print(dfs)

第二个场景修复

错误点:你已经定位到了目标table节点,但仍传入了整个页面的序列化内容,页面内其他不规范的DOM结构会干扰pandas解析。
修复后代码:

import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup

url = 'https://www.stadiumsofprofootball.com/comparisons/'
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"
}
r = requests.get(url, headers=headers)
text = r.text
soup = BeautifulSoup(text, "lxml")
table = soup.find_all('table')[0]
# 仅传入目标table的序列化内容
df = pd.read_html(str(table))[0]
print(df)

通用排查要点

  • 所有爬虫请求必须携带User-Agent参数,避免站点反爬返回无效页面
  • 已通过BeautifulSoup定位到目标table的情况下,直接传入该节点的字符串形式,不要传入上层节点或全页内容
  • 若仍解析失败,可给read_html添加header=None参数,跳过pandas的表头校验逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:03