read_html常抓不到表格,因默认仅解析标签且依赖HTML解析器质量;遇JS渲染、CSS模拟表格或复杂合并单元格时易失败,需结合requests、BeautifulSoup及正则清洗等手段处理。

read_html 为什么经常抓不到表格?
因为 实操建议: 原始 HTML 表格单元格常含 实操建议: 很多网站把原始数值藏在 实操建议: 常见错误是 实操建议: 实际清洗 HTML 表格最耗时的环节,往往不是正则本身,而是反复验证「这个 read_html 默认只解析 标签,且依赖底层的 HTML 解析器(如 lxml 或 html5lib)对 DOM 的还原质量。如果网页用了 JavaScript 渲染表格、或表格嵌套在
,read_html 就会返回空列表或错位数据。requests.get(url).text 抓源码,手动搜索 确认表格是否真实存在于 HTML 中
pd.read_html(html, flavor='lxml')(比默认的 html5lib 更严格,但对不规范标签更敏感)match= 参数缩小匹配范围,比如 match='用户列表' 只取含该文本的表格tables[0],别直接 tables[0].to_csv(...) 就完事——先 print(tables[0].head()) 看结构表格内容含乱码、多余空格、换行怎么办?
、\n、\t、首尾空格,甚至混入广告文案或脚本注释。直接转 DataFrame 后,str.strip() 会失效,因为 NaN 值调用该方法会报 AttributeError。
df = df.applymap(lambda x: re.sub(r'[\s\n\t]+', ' ', str(x)).strip() if pd.notna(x) else x)
df = df.apply(lambda s: s.astype(str).str.replace(r'[\s\n\t]+', ' ', regex=True).str.strip())
df['价格'] = df['价格'].str.replace(r'[^\d.元]', '', regex=True)
regex=True 在 pandas ≥1.3 是默认值,但低于该版本必须显式传入,否则静默忽略如何提取 HTML 表格中隐藏在
里的真实值?title 属性里,表格单元格只显示「↑23%」这类摘要,真正要的是 title 里的「23.456789」。这时候 read_html 只读取了可见文本,丢掉了属性信息。
read_html,改用 BeautifulSoup 先提取带属性的单元格:from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
rows = soup.select('table tr')
data = []
for row in rows[1:]: # 跳过表头
cells = row.find_all(['td', 'th'])
row_data = []
for cell in cells:
# 优先取 title,没有就取文本
val = cell.get('title') or cell.get_text()
row_data.append(re.sub(r'[\s\n\t]+', ' ', val).strip())
data.append(row_data)pd.DataFrame(data, columns=header) 构造,避免属性丢失soup.select('table[data-id="price"]') 定位更稳清洗后数字列仍是字符串,
astype(float) 报错怎么处理?ValueError: could not convert string to float: '¥12,345.67' 或 '--' 或空白。pandas 不会自动跳过非法值,也不会把逗号当千分位处理。
df['金额'] = df['金额'].str.replace(r'[^\d.-]', '', regex=True)(保留数字、小数点、负号)pd.to_numeric(df['金额'], errors='coerce') —— 非法值变 NaN,不会中断df['金额'].str.contains(r'[a-zA-Z\u4e00-\u9fa5]').any() 快速发现中文干扰.str.replace(',', ''),别指望 locale 自动识别title 是不是真的代表原始值」「那个 -- 是缺失值还是零值」「空单元格到底是 还是纯空字符串」——建议每步清洗后都用 df.dtypes 和 df.iloc[:3].to_dict('records') 快速快照,比盲目写正则更省时间。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











