0

0

Pandas怎么爬网页表格_read_html()提取HTML中的所有table标签

P粉602998670

P粉602998670

发布时间:2026-03-11 19:23:03

|

541人浏览过

|

来源于php中文网

原创

pd.read_html()不是爬虫,它仅解析html字符串中的标签,不发请求、不执行js、不处理登录或反爬,需先用requests等工具获取html源码再传入。

pandas怎么爬网页表格_read_html()提取html中的所有table标签

直接说结论:pd.read_html() 不是爬虫,它只解析 HTML 字符串里的 <table>,不发请求、不执行 JS、不处理登录或反爬——想用它“爬网页”,得先自己把 HTML 拿回来。 <h3>为什么 <code>pd.read_html() 会报错或返回空列表

常见现象:调用后返回 [],或者抛出 ValueError: No tables found。根本原因不是函数坏了,而是它压根没看到 <table> 标签。 <ul> <li>你传的是 URL 字符串(比如 <code>"https://example.com"),但 pandas 1.4+ 默认已禁用 URL 自动下载(出于安全和明确性考虑)

  • 网页实际用 JS 渲染表格(pd.read_html() 只看静态 HTML 源码,不跑 JS)
  • 服务器返回了 403/406,但你没检查响应内容,直接喂给了 read_html()
  • HTML 源码里确实没 <table>,可能是用 <code><div> + CSS 模拟的“假表格” <h3>怎么正确配合 requests 获取网页 HTML 再交给 <code>pd.read_html()

    这是最常用、可控性最强的做法。requests 负责拿源码,pd.read_html() 负责解析。

    • 必须显式用 requests.get() 获取响应,检查 r.status_code == 200r.text 是否含 <table> <li>中文网页注意设置 <code>r.encoding = r.apparent_encoding,否则表格文字可能乱码
    • 传给 pd.read_html() 的必须是字符串(r.text),不是 Response 对象
    • 可加参数缩小匹配范围,比如 match="订单" 只找含“订单”的表格,避免误取广告位里的 <table> <p>示例:</p> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/ai/1838" title="皮卡智能"><img src="https://img.php.cn/upload/ai_manual/000/969/633/68b6c8bab1e36588.png" alt="皮卡智能" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/ai/1838" title="皮卡智能">皮卡智能</a> <p>AI驱动高效视觉设计平台</p> </div> <a href="/ai/1838" title="皮卡智能" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <pre class="brush:php;toolbar:false;">import pandas as pd import requests r = requests.get(&quot;https://httpbin.org/html&quot;) r.encoding = r.apparent_encoding tables = pd.read_html(r.text, match=&quot;table&quot;, header=0)</pre> <h3> <code>pd.read_html() 返回多个 DataFrame,怎么选对的那个

      网页常有多个 <table>(导航栏、页脚、数据表混在一起),<code>pd.read_html() 默认全返回一个 list,你需要手动挑。

      • len(tables) 看有几个,再逐个打印 tables[0].head() 观察结构
      • 优先看 shape:真实数据表通常行数 > 5,列数 > 2;空表或单行表大概率是装饰用
      • attrs={"class": "data-table"}attrs={"id": "main-table"} 锁定特定 <table>,比靠顺序更可靠 <li>如果表格有合并单元格(<code>rowspan/colspan),pandas 可能解析错行,这时要加 flavor="html5lib"(需装 html5lib
      • 容易被忽略的兼容性和边界情况

        不是所有 HTML 表格都能“开箱即用”。有些坑只有真遇到才记得住。

        • pd.read_html() 默认用 lxml 解析器,但某些畸形 HTML(如未闭合标签、嵌套错乱)会崩,换 flavor="html5lib" 更容错,但慢一点
        • 表格第一行是标题?加 header=0;没有标题?加 header=None,否则 pandas 会强行把第一行当列名
        • 数字带逗号(如 "1,234")或货币符号("¥100"),默认转成 object 类型,后续计算前得用 str.replace() 清洗
        • 如果目标表格在 iframe 里,requests 拿到的主页面 HTML 里没有它——得单独请求 iframe 的 src 地址

        真正卡住的地方,往往不是 read_html() 本身,而是你拿到的 HTML 里到底有没有那个 table,以及它是不是你以为的样子。

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

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

    下载

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

    热门AI工具

    更多
    DeepSeek
    DeepSeek

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

    豆包大模型
    豆包大模型

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

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

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

    文心一言
    文心一言

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

    讯飞写作
    讯飞写作

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

    即梦AI
    即梦AI

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

    ChatGPT
    ChatGPT

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

    相关专题

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

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

    78

    2025.12.04

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

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

    32

    2026.01.31

    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中文网学习。

    1566

    2023.10.24

    字符串介绍
    字符串介绍

    字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    649

    2023.11.24

    java读取文件转成字符串的方法
    java读取文件转成字符串的方法

    Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

    1228

    2024.03.22

    php中定义字符串的方式
    php中定义字符串的方式

    php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    1184

    2024.04.29

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

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

    精品课程

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

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