Python如何清洗HTML表格数据_使用read_html自动抓取并结合正则解析

秋浩大大_6185

秋浩大大_6185

2026-04-17

289人浏览

原创

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

python如何清洗html表格数据_使用read_html自动抓取并结合正则解析

read_html 为什么经常抓不到表格?

因为 read_html 默认只解析

标签,且依赖底层的 HTML 解析器(如 lxml 或 html5lib)对 DOM 的还原质量。如果网页用了 JavaScript 渲染表格、或表格嵌套在
里靠 CSS 模拟、或存在大量 /,read_html 就会返回空列表或错位数据。

实操建议:

财经HTML高端海报生成
财经HTML高端海报生成

复杂得财经如何变成清晰,适合手机看的海报?如何加上你的IP

下载
  • 先用 requests.get(url).text 抓源码,手动搜索
确认表格是否真实存在于 HTML 中
  • 显式指定解析器:pd.read_html(html, flavor='lxml')(比默认的 html5lib 更严格,但对不规范标签更敏感)
  • 加 match= 参数缩小匹配范围,比如 match='用户列表' 只取含该文本的表格
  • 若返回多个表格,用索引取具体一个:tables[0],别直接 tables[0].to_csv(...) 就完事——先 print(tables[0].head()) 看结构
  • 表格内容含乱码、多余空格、换行怎么办?

    原始 HTML 表格单元格常含  、\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)
    • 更安全的写法(兼容老版 pandas):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 自动识别

    实际清洗 HTML 表格最耗时的环节,往往不是正则本身,而是反复验证「这个 title 是不是真的代表原始值」「那个 -- 是缺失值还是零值」「空单元格到底是   还是纯空字符串」——建议每步清洗后都用 df.dtypes 和 df.iloc[:3].to_dict('records') 快速快照,比盲目写正则更省时间。

    Python免费学习笔记(深入):立即使用
    在学习笔记中,你将探索 Python 的核心概念和高级技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    python html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    python打包成可执行文件
    python打包成可执行文件

    本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

    2023.07.20

    1851

    4

    python能做什么
    python能做什么

    python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

    2023.07.25

    4984

    7

    format在python中的用法
    format在python中的用法

    Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.31

    1789

    3

    python教程
    python教程

    Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

    2023.08.03

    29997

    23

    python环境变量的配置
    python环境变量的配置

    Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.04

    3567

    5

    python eval
    python eval

    eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.04

    3587

    5

    scratch和python区别
    scratch和python区别

    scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.11

    1223

    5

    python合并两个列表
    python合并两个列表

    Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.10

    616

    4

    python是前端还是后端
    python是前端还是后端

    Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.11

    2783

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Uvicorn官方安装与入门手册
    Uvicorn官方安装与入门手册

    共0课时 | 0人学习

    Python uv官方项目管理指南
    Python uv官方项目管理指南

    共0课时 | 0人学习

    Python uv官方安装与入门文档
    Python uv官方安装与入门文档

    共0课时 | 0人学习