讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用 Python 将网页表格数据解析为键值结构(标题-内容映射)

小磊吖_3363

小磊吖_3363

发布时间:2026-10-07 22:23:22

|

628人浏览过

|

来源于php中文网

原创

如何用 Python 将网页表格数据解析为键值结构(标题-内容映射)

本文教你使用 selenium 替代 requests + beautifulsoup,稳定抓取 javascript 渲染的动态表格,并将交替出现的标题行与数据行自动构造成字典结构,解决 vba 转 python 用户常见的“奇偶行分层解析”难题。

本文教你使用 selenium 替代 requests + beautifulsoup,稳定抓取 javascript 渲染的动态表格,并将交替出现的标题行与数据行自动构造成字典结构,解决 vba 转 python 用户常见的“奇偶行分层解析”难题。

在从静态 HTML 表格迁移至现代 JS 渲染页面时,requests + BeautifulSoup 常因无法执行 JavaScript 而失效——正如目标网址 modernarmor.worldoftanks.com 所示:其表格内容由前端脚本动态注入,原始 HTML 中 <tbody> 为空或结构不完整。此时,<strong>Selenium 是更可靠的选择</strong>,它通过真实浏览器驱动模拟用户行为,确保 DOM 完全加载后再提取数据。<p>核心思路是识别“标题-数据”交替模式:每两个 <code><tr> 组成一对,其中第 0、2、4… 行(索引为偶数)作为键(header),紧随其后的第 1、3、5… 行(索引为奇数)作为值(data list)。关键在于精准定位元素并按序遍历:<pre class="brush:php;toolbar:false;">from selenium.webdriver import Chrome from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By URL = &quot;https://modernarmor.worldoftanks.com/en/cms/guides/map-labels-tiers-eras/&quot; def reject_cookies(driver): &quot;&quot;&quot;自动点击“拒绝全部 Cookie”按钮(若存在),避免遮挡主内容&quot;&quot;&quot; wait = WebDriverWait(driver, 5) try: button = wait.until(EC.element_to_be_clickable((By.ID, &quot;onetrust-reject-all-handler&quot;))) button.click() except: # 按钮未出现则跳过 pass def parse_table_as_dict(driver): &quot;&quot;&quot; 解析表格为 {header: [item1, item2, ...]} 字典 假设 DOM 中 tr 元素严格按 header/data 交替排列 &quot;&quot;&quot; wait = WebDriverWait(driver, 10) # 使用高置信度 CSS 选择器定位表格行(避免通用 tr 导致误匹配) rows = wait.until(EC.presence_of_all_elements_located( (By.CSS_SELECTOR, &quot;tr.news_post-widget-table-tr&quot;) )) result = {} header = None for i, row in enumerate(rows): text = row.text.strip() if not text: # 跳过空行 continue if i % 2 == 0: # 偶数索引 → 标题行 header = text else: # 奇数索引 → 数据行;按换行符分割为列表 if header and text: # 多个地图名通常以换行符分隔(非逗号!原代码正则逻辑在此不适用) items = [item.strip() for item in text.split(&quot;\n&quot;) if item.strip()] result[header] = items return result # 主流程 with Chrome() as driver: driver.get(URL) reject_cookies(driver) data_dict = parse_table_as_dict(driver) # 输出示例(格式化展示) for header, maps in list(data_dict.items())[:3]: # 仅显示前3组 print(f&quot;▶ {header}&quot;) for m in maps[:3]: # 每组最多列3个地图 print(f&quot; └─ {m}&quot;) if len(maps) &gt; 3: print(f&quot; └─ ... and {len(maps)-3} more&quot;)</pre><p>⚠️ <strong>重要注意事项:</strong> </p> <ul> <li> <strong>不要硬编码索引逻辑</strong>:原问题中尝试用 <code>stringCount == 2 判断 header 的方式不可靠——实际网页中标题长度多变,且分隔符是 \n 而非 ,,正则替换反而破坏结构;应直接依赖 DOM 顺序和语义(如 class 名 news_post-widget-table-tr)。

  • 环境准备:需安装 selenium 并配置 ChromeDriver(推荐使用 webdriver-manager 自动管理):
    pip install selenium webdriver-manager

    然后将 with Chrome() as driver: 替换为:

    python-pro
    python-pro

    高级 Python 特性、异步编程、性能调优、静态类型、内存管理、Python 内部机制及生态库方面的专家。

    下载

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

    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    service = Service(ChromeDriverManager().install())
    with Chrome(service=service) as driver:
  • 健壮性增强建议:生产环境应添加显式等待(如 EC.visibility_of_element_located)、异常重试机制,并对 header 去重/标准化(如去除多余空格、统一大小写)。
  • 最终,你将获得一个结构清晰、可直接用于 Pandas DataFrame 构建或 JSON 导出的 Python 字典——告别二维数组手动索引,真正实现“语义化解析”。

    热门AI工具

    更多
    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    咔片AIPPT

    一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    二狗PPT
    二狗PPT Hot

    一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

    蛙蛙写作

    一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    Loomy
    Loomy Hot

    一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

    火山引擎

    火山引擎是一款面向企业的云计算与AI服务平台。

    相关专题

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

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

    1671

    2023.07.20

    python能做什么
    python能做什么

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

    4204

    2023.07.25

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

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

    1669

    2023.07.31

    python教程
    python教程

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

    24417

    2023.08.03

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

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

    2987

    2023.08.04

    python eval
    python eval

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

    3007

    2023.08.04

    scratch和python区别
    scratch和python区别

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

    1163

    2023.08.11

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

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

    596

    2023.08.10

    FrankenPHP集成Laravel详细教程
    FrankenPHP集成Laravel详细教程

    本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

    0

    2026.10.08

    热门下载

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

    精品课程

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

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn