0

0

Python爬虫怎么提取表格_Pandas read_html()直接传入URL爬取页面内所有table数据

P粉602998670

P粉602998670

发布时间:2026-03-13 09:43:24

|

811人浏览过

|

来源于php中文网

原创

pandas.read_html()直接传URL常失败,因其仅用urllib最简GET、无UA、不处理JS渲染和反爬;应先用requests等获取HTML再解析。

python爬虫怎么提取表格_pandas read_html()直接传入url爬取页面内所有table数据

直接传 URL 给 pandas.read_html() 是可行的,但多数情况下会失败或漏表——根本原因不是函数不行,而是它不发请求、不执行 JS、不处理反爬、不自动解码,纯靠底层 lxmlhtml5lib 解析你“塞给它的 HTML 字符串”。

为什么 read_html() 传 URL 常常返回空列表

这个函数表面上支持 URL,实际只是调用 urllib.request.urlopen() 做最简 GET,没带 User-Agent,没处理重定向,遇到 403/406/302 就直接报错或返回空;更关键的是,它完全不等页面 JS 渲染,所有动态插入的 <table> 标签都看不到。

  • 常见错误现象:ValueError: No tables found 或返回空 list
  • 典型场景:目标页面由 Vue/React 渲染、有登录态校验、或服务器根据 UA 拒绝默认 Python 请求
  • 参数差异:read_html(url, ...)read_html(html_string, ...) 的底层逻辑一致,区别只在“谁负责拿 HTML”
  • 性能影响:用它直连 URL 不会比自己用 requests 多快,反而因缺少重试、会话复用等机制更不稳定

正确做法:先拿 HTML,再喂给 read_html()

把网络请求和 HTML 解析拆开,才能控制 UA、cookies、重试、编码、JS 渲染等环节。95% 的表格提取问题出在“HTML 拿得不对”,而不是 read_html() 本身。

  • 基础安全请求(绕过简单 UA 检查):
    import requests<br>headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}<br>resp = requests.get(url, headers=headers, timeout=10)<br>resp.raise_for_status()<br>resp.encoding = resp.apparent_encoding  # 防乱码<br>tables = pd.read_html(resp.text)
  • 需要登录或表单交互?必须用 requests.Session() 保持 cookies
  • 表格由 JS 动态生成?换 seleniumplaywright 渲染后取 page.content(),再传给 read_html()
  • 注意:read_html() 默认只认 <table> 标签,如果页面用 div+css 模拟表格,它完全无能为力

read_html() 的关键参数怎么选

默认行为往往不够用,尤其当页面有多个表、嵌套表、无表头、或含合并单元格时。

TTSMaker
TTSMaker

TTSMaker是一个免费的文本转语音工具,提供语音生成服务,支持多种语言。

下载

立即学习Python免费学习笔记(深入)”;

  • match:用正则快速筛选目标表,比如 match=r'季度.*营收',避免取错表
  • header:指定第几行作列名,默认 0,若表头在第 2 行就设 header=1
  • skiprows:跳过前 N 行(比如广告行、说明行),比手动切片更稳
  • flavor:默认 'lxml',但遇到畸形 HTML 可试 'html5lib'(需额外装包),速度慢但容错高
  • encoding:仅当 resp.text 已是 bytes 且编码异常时才需显式传,多数情况交给 resp.encoding 更可靠

容易被忽略的编码和结构陷阱

即使 HTML 成功拿到,表格解析仍可能翻车——尤其是中文页面和老系统后台。

  • 常见错误现象:列名乱码、数字变 NaN、某列全空
  • 根本原因:HTML 声明的 charset 和实际编码不一致,或 <meta> 标签位置靠后导致 requests 检测失败
  • 实操建议:强制用 resp.content.decode('gbk', errors='ignore')(针对国内老站),再传给 read_html()
  • 另一个坑:read_html()colspan/rowspan 支持有限,合并单元格可能被展开成多列,需后续用 df.ilocfillna(method='ffill') 修复

真正卡住人的,从来不是 read_html() 会不会用,而是没意识到它只是个“解析器”,不是“爬虫”。URL 能不能直接传,取决于你愿不愿意为那行代码多写三行 request 控制逻辑。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

80

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

32

2026.01.31

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

336

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

776

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号