如何用 Python 将网页表格数据解析为结构化键值对(标题+对应条目列表)

轻浩姑娘_1323

轻浩姑娘_1323

2026-10-07

230人浏览

原创

如何用 Python 将网页表格数据解析为结构化键值对(标题+对应条目列表)

本文讲解如何使用 selenium 替代 requests + beautifulsoup,稳定抓取依赖 javascript 渲染的动态表格,并将“偶数行作标题、奇数行作内容”的交替结构自动转换为字典格式的结构化数据。

本文讲解如何使用 selenium 替代 requests + beautifulsoup,稳定抓取依赖 javascript 渲染的动态表格,并将“偶数行作标题、奇数行作内容”的交替结构自动转换为字典格式的结构化数据。

在网页爬虫实践中,许多现代网站(如 modernarmor.worldoftanks.com)采用 JavaScript 动态加载表格内容,导致 requests + BeautifulSoup 无法获取真实 DOM —— 这正是原代码始终无法正确提取表头与数据的根本原因。此时,Selenium 成为更可靠的选择:它通过真实浏览器驱动执行渲染,确保所有 <tr> 元素(包括 JS 注入的)均被完整加载。<p>以下是一个完整、健壮的解决方案:</p> <h3>✅ 核心逻辑说明</h3> <ul> <li>表格结构为严格交替:第 0、2、4… 行是分类标题(如 <code>"World War II: Battle Tiers 1-2"),第 1、3、5… 行是该分类下的地图名称列表(换行分隔);

  • 使用 WebDriverWait 确保元素加载完成,避免 NoSuchElementException;
  • 自动处理 Cookie 弹窗(如 OneTrust),提升脚本鲁棒性;
  • 最终输出为 dict[str, list[str]],天然支持后续导出 CSV、JSON 或 Pandas DataFrame。
  • ✅ 完整可运行代码

    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
    import json
    
    URL = "https://modernarmor.worldoftanks.com/en/cms/guides/map-labels-tiers-eras/"
    
    def reject_cookies(driver):
        """点击 'Reject All' 按钮关闭 Cookie 提示(若存在)"""
        wait = WebDriverWait(driver, 3)
        try:
            button = wait.until(EC.element_to_be_clickable((By.ID, "onetrust-reject-all-handler")))
            button.click()
        except:  # 超时或元素不存在则跳过
            pass
    
    def scrape_map_labels(driver):
        """主解析函数:按行交替提取标题与地图列表"""
        wait = WebDriverWait(driver, 5)
        # 精确匹配表格行(基于实际页面 class)
        rows = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "tr.news_post-widget-table-tr")))
    
        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:
                    result[header] = [item.strip() for item in text.split("\n") if item.strip()]
    
        return result
    
    # 启动浏览器并执行
    with Chrome() as driver:
        driver.get(URL)
        reject_cookies(driver)
        data = scrape_map_labels(driver)
    
    # 输出结构化结果(便于调试与后续处理)
    print(json.dumps(data, indent=2, ensure_ascii=False))

    ⚠️ 注意事项与优化建议

    • 驱动准备:需提前安装匹配版本的 ChromeDriver,或使用 webdriver-manager 自动管理(推荐):
      pip install webdriver-manager

      并替换 with Chrome() 为:

      python-pro
      python-pro

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

      下载
      from selenium.webdriver.chrome.service import Service
      from webdriver_manager.chrome import ChromeDriverManager
      with Chrome(service=Service(ChromeDriverManager().install())) as driver:
    • 反爬适配:若页面增加检测,可添加 options.add_argument("--headless=new") 静默运行,或设置 User-Agent;
    • 数据清洗增强:对 result[header] 中每个地图名,可追加 .replace(" [MERGE]", "") 或正则清理(如 re.sub(r'[^\w\s]', '', name));
    • 扩展用途:该字典可直接转为 Pandas DataFrame:
      import pandas as pd
      df = pd.DataFrame([(k, v) for k, vs in data.items() for v in vs], columns=["Era_Tier", "Map"])

    该方案摒弃了脆弱的字符串计数(如 stringCount == 2)和正则预处理,转而依托 DOM 结构本身进行语义化解析,显著提升可维护性与准确性。

    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

    24157

    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

    热门下载

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

    精品课程

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