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

小磊吖_3363

小磊吖_3363

2026-10-07

608人浏览

原创

如何用 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 内部机制及生态库方面的专家。

    下载
    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 字典——告别二维数组手动索引,真正实现“语义化解析”。

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

    相关专题

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

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

    2023.07.20

    1671

    4

    python能做什么
    python能做什么

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

    2023.07.25

    4164

    7

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

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

    2023.07.31

    1669

    3

    python教程
    python教程

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

    2023.08.03

    24137

    23

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

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

    2023.08.04

    2947

    5

    python eval
    python eval

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

    2023.08.04

    2987

    5

    scratch和python区别
    scratch和python区别

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

    2023.08.11

    1163

    5

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

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

    2023.08.10

    596

    4

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

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

    2023.08.11

    2303

    5

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程