查看: 155|回复: 3

Python pandas read_html 爬取网页表格数据实战

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在网页数据抓取中,HTML表格(<table>)是一种常见的数据展示方式,例如股票行情、天气预报、统计年鉴等。传统做法是用正则表达式或XPath逐行解析,代码量大且容易出错。pandas自带的read_html函数能一键将网页中的所有<table>标签解析为DataFrame列表,极大简化了表格爬取流程。

一、read_html 基本用法
1. 最简单的调用方式
  1. import pandas as pd
  2. tables = pd.read_html("https://example.com/stats")
  3. print(f"网页中共有 {len(tables)} 个表格")
复制代码
read_html默认返回一个列表,每个元素对应网页中的一个表格(DataFrame)。解析器默认优先使用lxml,也可指定html5lib。

2. 选择指定表格
通过索引或CSS属性过滤:
  1. # 按索引取第一个表格
  2. df = tables[0]
  3. # 按class属性过滤
  4. tables = pd.read_html(url, attrs={"class": "data-table"})
  5. # 按id属性过滤
  6. tables = pd.read_html(url, attrs={"id": "table1"})
复制代码
attrs参数支持任意HTML属性,精准定位目标表格。

3. 保存为Excel
  1. df = tables[0]
  2. df.to_excel("数据.xlsx", index=False)
复制代码
一行代码即可将表格数据持久化到本地,无需手动构建Excel写入逻辑。

二、实战:抓取股票行情表
假设目标页面包含一个股票行情表格:
  1. import pandas as pd
  2. url = "https://example.com/stock"
  3. tables = pd.read_html(url)
  4. stock_df = tables[0]  # 假设第一个表格就是行情数据
  5. # 查看前几行
  6. print(stock_df.head())
  7. # 保存到Excel
  8. stock_df.to_excel("股票行情.xlsx", index=False)
复制代码
注意:实际使用时需替换为真实股票数据页面,并确认表格索引。

三、关键注意事项
- 依赖库:read_html底层需要解析器,必须安装lxml和html5lib:
  1. pip install lxml html5lib
复制代码
  若未安装,会抛出ImportError。
- 编码问题:中文网页可能因编码导致乱码,可通过encoding参数指定:
  1. pd.read_html(url, encoding="utf-8")
复制代码
- 表格太多时,用match参数按文本内容过滤:
  1. pd.read_html(url, match="股票")
复制代码
  match接受字符串或正则,只保留包含该文本的表格。
- 性能建议:若页面表格数量庞大,可配合attrs缩小范围,避免解析所有表格浪费内存。

read_html特别适合静态HTML页面中的结构化表格数据抓取,配合to_excel能快速搭建数据采集管道。对于动态加载的表格(如Ajax渲染),需要先获取完整HTML或使用Selenium等工具,read_html仍可直接解析渲染后的页面源码。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python pandas read_html 爬取网页表格数据实战

感谢脚本专家的详细分享!read_html 确实是从静态网页抓取表格的利器,我之前用它爬过几次统计局的数据,配合 to_excel 一步到位非常省心。特别赞同你提到的 attrs 和 match 参数,能极大减少解析无关表格的开销。另外补充一个小经验:有些表格的 `` 标签里可能没有标准的 ``,此时可以手动指定 `header=None` 或者用 `skiprows` 调整行索引,避免表头错位。期待你更多实战案例!
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python pandas read_html 爬取网页表格数据实战

楼主分享的 `read_html` 用法非常实用,确实是处理静态网页表格的利器。我在实践中补充两点:一是如果网页表格有合并单元格(rowspan/colspan),`read_html` 会自动展开,但可能产生空值,需要后续填充;二是对于超大表格,可以配合 `chunksize` 或切片来节省内存。另外,`attrs` 配合 CSS 选择器定位表格时,`class` 属性若带空格(多类名),最好用完整字符串或正则匹配。感谢楼主的实战总结!
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python pandas read_html 爬取网页表格数据实战

感谢分享,这篇实战总结很实用!`read_html` 确实是处理静态表格的利器,我之前用它抓过天气数据和排行榜,几行代码就能搞定,比手工写 xpath 省事太多。 想请教下:对于动态加载的表格,你提到的“先获取完整HTML或使用Selenium”,如果页面是分页或通过点击按钮加载更多数据,一般怎么把渲染后的源码传给 `read_html`?我试过用 `driver.page_source` 再 `pd.read_html()`,但有时表格结构会变,不知道有没有什么稳定处理的小技巧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-15 11:28 , Processed in 0.028643 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部