使用Selenium抓取网页中关联的H2标题及其段落内容

使用Selenium抓取网页中关联的H2标题及其段落内容

本教程详细介绍了如何利用selenium和xpath定位策略,高效地从html文档中抓取具有层级关系的h2标题及其后续所有p标签内容。通过构建一个字典结构,将h2标题作为键,其关联的p标签文本聚合为值,最终实现将非结构化网页内容转化为结构化的标题与内容对,并提供了完整的python代码示例。

在网页数据抓取任务中,我们经常需要提取具有特定层级或关联关系的内容,例如文章的标题(通常是H标签)及其对应的正文段落(P标签)。本教程将指导您如何使用Selenium WebDriver,结合XPath定位策略,精确地抓取网页中H2标题及其紧随其后的所有P标签内容,并将其组织成结构化的数据格式。

1. 理解目标数据结构

假设我们有以下HTML结构,其中每个

标签代表一个文章标题,其后紧跟着若干个

标签,这些

标签共同构成了该标题下的文章内容:

Title1

text I want

醒文
醒文

文字排版美化生图工具

醒文 131
查看详情 醒文

text I want

Title2

text I want

text I want

text I want

Title3

text I want

text I want

我们的目标是将这些数据转换为以下结构:

[{'title': 'Title1', 'content': 'text I want text I want'}, {'title': 'Title2', 'content': 'text I want text I want text I want'}, {'title': 'Title3', 'content': 'text I want text I want'}]

其中,每个H2标签的文本作为title,其后所有P标签的文本拼接起来作为content。

2. 核心抓取策略

实现这一目标的关键在于:

识别所有H2标题: 作为内容的逻辑分隔符和键。识别所有P标签: 作为要抓取的内容片段。建立P标签与H2标题的关联: 对于每个P标签,我们需要确定它属于哪个H2标题。这里将利用XPath的preceding-sibling::h2[1]轴来查找每个P标签最近的前一个H2同级元素。聚合内容: 将属于同一个H2标题下的所有P标签文本拼接起来。

3. Selenium环境准备

首先,确保您已安装Selenium库和WebDriver管理器。

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManager# 初始化Chrome WebDriver# 使用webdriver_manager自动管理浏览器驱动driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))# 模拟加载HTML内容# 在实际应用中,您会使用 driver.get("http://your-website.com")html_content = '''

Title1

text I want

text I want

Title2

text I want

text I want

text I want

Title3

text I want

text I want

'''driver.get("data:text/html;charset=utf-8," + html_content)

4. 逐步实现数据抓取

4.1 初始化数据结构

我们首先遍历所有的

标签,以它们的文本作为字典的键,并初始化一个空字符串作为值。这将为每个标题创建一个占位符,用于后续聚合其内容。

# 查找所有H2标签,并初始化一个字典# 字典的键是H2的文本,值初始化为空字符串data = dict((e.text, '') for e in driver.find_elements(By.CSS_SELECTOR, 'h2'))# 此时data可能为: {'Title1': '', 'Title2': '', 'Title3': ''}

4.2 关联P标签并聚合内容

接下来,我们遍历所有的

标签。对于每个

标签,我们使用XPath preceding-sibling::h2[1]来定位其最近的前一个同级

元素。然后,将当前

标签的文本添加到该

标题对应的字典值中。

# 遍历所有P标签,将其内容关联到对应的H2标题for p in driver.find_elements(By.CSS_SELECTOR, 'p'):    # 使用XPath查找当前P标签最近的前一个H2同级元素    # [1]确保只选择最近的一个    h2_text = p.find_element(By.XPATH, './preceding-sibling::h2[1]').text    # 将P标签的文本添加到对应H2标题的值中,用空格分隔    data[h2_text] = data[h2_text] + ' ' + p.text# 打印聚合后的数据print("聚合后的原始字典:", data)# 预期输出: {'Title1': ' text I want text I want', 'Title2': ' text I want text I want text I want', 'Title3': ' text I want text I want'}

XPath解释:

./:表示从当前元素(即当前的

标签)开始。

preceding-sibling:::这是一个轴(axis),它选择当前元素之前的所有同级元素。h2:指定我们只对

类型的同级元素感兴趣。

[1]:这是一个谓词(predicate),它选择集合中的第一个元素。在这里,它确保我们只获取距离当前

标签最近的那个

标签。

4.3 整理最终输出格式

虽然上述字典已经包含了所有数据,但通常我们更希望将数据整理成列表形式,例如标题列表、内容列表,或者更推荐的——一个包含字典的列表,每个字典代表一个完整的文章条目。

方式一:提取标题和内容列表

# 提取标题列表titles = list(data.keys())print("n标题列表:", titles)# 预期输出: ['Title1', 'Title2', 'Title3']# 提取内容列表contents = list(data.values())print("内容列表:", contents)# 预期输出: [' text I want text I want', ' text I want text I want text I want', ' text I want text I want']

方式二:生成结构化的字典列表(推荐)

为了保持数据的结构化和可读性,强烈建议将结果组织成一个包含字典的列表,每个字典包含title和content键。

# 生成一个包含字典的列表,每个字典代表一个文章条目structured_data = [{'title': x, 'content': y} for x, y in data.items()]print("n结构化数据(字典列表):", structured_data)# 预期输出:# [{'title': 'Title1', 'content': ' text I want text I want'},#  {'title': 'Title2', 'content': ' text I want text I want text I want'},#  {'title': 'Title3', 'content': ' text I want text I want'}]

5. 完整代码示例

将上述所有步骤整合,形成一个完整的、可运行的Python脚本:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManager# 1. 初始化WebDriverdriver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))# 2. 模拟加载HTML内容html_content = '''

Title1

text I want

text I want

Title2

text I want

text I want

text I want

Title3

text I want

text I want

'''driver.get("data:text/html;charset=utf-8," + html_content)# 3. 初始化数据字典:以H2文本为键,空字符串为值data = dict((e.text, '') for e in driver.find_elements(By.CSS_SELECTOR, 'h2'))# 4. 遍历所有P标签,并将其内容聚合到对应的H2标题下for p in driver.find_elements(By.CSS_SELECTOR, 'p'): # 使用XPath定位当前P标签最近的前一个H2同级元素 h2_text = p.find_element(By.XPATH, './preceding-sibling::h2[1]').text # 拼接P标签的文本到对应H2的值中 data[h2_text] = data[h2_text] + ' ' + p.text# 5. 将聚合后的数据转换为结构化的字典列表structured_output = [{'title': x, 'content': y} for x, y in data.items()]# 6. 打印最终结果print(structured_output)# 7. 关闭WebDriverdriver.quit()

6. 注意事项与总结

XPath的精确性: preceding-sibling::h2[1]是此方法的核心,它确保了每个P标签都被正确地关联到其最近的H2标题。如果HTML结构更复杂,例如H2和P之间可能存在其他不相关的标签,此XPath仍然有效,因为它只关心同级元素。内容拼接: 在拼接P标签文本时,使用’ ‘ + p.text可以确保不同段落之间有空格分隔,提高可读性。健壮性: 这种方法对于HTML结构相对一致的页面非常有效。如果H2和P标签的层级关系或顺序不固定,可能需要调整XPath或其他定位策略。数据清洗 抓取到的文本可能包含多余的空格、换行符等,在实际应用中,通常需要进行额外的数据清洗步骤(例如使用.strip()或正则表达式)来获取更干净的数据。推荐输出格式: 将数据组织成包含字典的列表(如[{‘title’: ‘…’, ‘content’: ‘…’}])是处理结构化数据的最佳实践,因为它清晰、易于访问和进一步处理(如保存到JSON、CSV或数据库)。

通过本教程,您应该能够熟练地使用Selenium和XPath来抓取网页中具有层级关联的标题和内容,并将它们转化为易于分析和使用的结构化数据。

以上就是使用Selenium抓取网页中关联的H2标题及其段落内容的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1590813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
解决JavaScript中innerHTML内容闪烁消失的问题
上一篇 2025年12月23日 06:17:53
如何为一个包含图片的 div 元素设置背景图片
下一篇 2025年12月23日 06:18:06

相关推荐

  • mysql如何输入注释 mysql写sql代码的格式规范

    mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范

    在mysql中,单行注释使用–(后跟空格)或#,多行注释使用/*…*/。1. 注释应解释“为什么”而非“是什么”,单行注释推荐使用–,#常用于脚本开头;2. 多行注释适用于复杂逻辑说明或版权信息;3. sql格式规范包括关键词大写、统一缩进、合理换行与逗号放置,以…

    2026年9月23日 用户投稿
    400
  • safari浏览器如何开启画中画模式播放视频_safari浏览器画中画模式开启方法

    如果您在观看网页视频时希望同时进行其他操作,可以启用 Safari 浏览器的画中画模式,让视频以浮动小窗形式继续播放。此功能支持大多数主流视频网站,如 YouTube、优酷等。 本文运行环境:MacBook Air,macOS Sonoma 一、通过视频右键菜单开启画中画 此方法适用于正在播放的视频…

    2026年9月23日
    000
  • FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧

    FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧

    FlexClip通过AI脚本生成、文本转视频、AI配音与图片生成等智能工具,实现从文案到成片的高效制作。其亮点在于一站式云端操作、强大内容生成力、素材库丰富、易用性与专业性兼备。用户可通过个性化修改、原创素材融入、精细剪辑及多轮迭代提升视频独特性,同时应对AI理解偏差、素材同质化、情感表达局限等挑战…

    2026年9月23日 用户投稿
    000
  • Java中使用栈验证JSON字符串结构:深入理解与实践

    本文探讨了在Java中利用栈验证JSON字符串结构的核心原理与常见陷阱。我们将分析一种初始实现中处理引号、转义字符及字符串内部结构字符的不足,并提供一个更健壮的栈基方法,以准确判断JSON的括号、方括号和引号是否平衡,同时纠正关于不完整JSON片段有效性的常见误解。 1. JSON结构与验证的重要性…

    2026年9月23日
    100
  • CentOS服务器安装宝塔(图文详解)

    CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)

    一、概述 宝塔是一款安全且高效的服务器管理面板。 快速创建和管理web项目 提供方便的网站管理功能,例如域名绑定,一键部署SSL证书,调整网站配置等。 >>查看 快速查看服务器资源使用情况 监测CPU、内存、磁盘IO、网络IO数据,并可设置记录保存天数,随时查看特定日期的数据。 >…

    2026年9月23日 用户投稿
    100
  • VSCode配置Java编程环境(手把手教学,环境搭建不求人)

    安装jdk并配置环境变量,推荐使用java 11或java 17等lts版本,通过命令行执行java -version和javac -version验证安装成功;2. 下载并安装vscode本体,按照默认安装流程完成;3. 在vscode中安装“extension pack for java”扩展包…

    2026年9月23日
    100
  • 如何在mysql中优化多表JOIN查询

    答案:优化MySQL多表JOIN需创建关联字段索引、提前过滤数据、选择合适JOIN类型与表序、利用EXPLAIN分析执行计划,并定期更新统计信息以提升查询效率。 在MySQL中优化多表JOIN查询,关键在于减少数据扫描量、提升连接效率,并合理利用索引和执行计划。以下是一些实用的优化策略。 1. 确保…

    2026年9月23日
    300
  • 苹果手机USB调试模式开启方法

    准备工作 在操作前,请确保你的iPhone已连接网络,并升级至最新的iOS系统版本。同时,准备一台安装了最新版iTunes(Windows)或Finder(macOS)的电脑,以确保设备能够被正确识别和管理。 步骤一:开启相关调试功能 打开iPhone上的“设置”应用。 进入“Safari”浏览器设…

    2026年9月23日
    100
  • Java Web项目在无Maven/Eclipse环境下生成WAR包的实践指南

    本文详细介绍了如何在没有Maven或Eclipse等集成开发环境或构建工具的情况下,为Java Web项目手动或通过Apache Ant工具生成WAR文件。教程涵盖了WAR文件的基本结构、使用Ant进行编译和打包的具体步骤,并提供了Ant构建脚本示例,旨在帮助开发者理解并实践WAR包的独立构建过程。…

    2026年9月23日
    100
  • PHP教程:解析和访问包含JSON字符串的数组值

    本教程旨在指导读者如何高效地从PHP数组中提取数据,特别是当数组的每个元素都是一个JSON格式的字符串时。文章将详细介绍如何利用json_decode()函数将JSON字符串转换为PHP数组,并通过示例代码演示循环遍历和直接访问特定字段的方法,帮助您轻松处理此类复杂数据结构。 理解数据结构 在php…

    2026年9月23日
    200
  • chrome浏览器最新官方网址下载 chrome浏览器官网链接快速直达

    Chrome浏览器最新官方下载网址是https://www.google.cn/chrome/,提供安卓版和手机版下载,界面简洁,支持书签同步、网页翻译、点按搜索等功能,确保快速安全的浏览体验。 chrome浏览器最新官方网址下载在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来chrome…

    2026年9月23日
    200
  • safari浏览器与iCloud钥匙串同步失败如何解决_safari浏览器钥匙串同步失败解决方法

    首先检查iCloud钥匙串是否在所有设备上开启且使用同一Apple ID,确认已启用双重认证;接着重启设备并重新开启钥匙串功能以修复临时故障;然后确保网络稳定并查看Apple服务器状态正常;最后通过退出并重新登录Apple ID重建同步授权,恢复密码自动填充与跨设备同步。 如果您在使用Safari浏…

    2026年9月23日
    200
  • VSCode极速配置Scala:sbt支持、中文文档、REPL集成

    安装JDK和sbt后,在VSCode中安装Metals扩展,即可快速搭建Scala开发环境;2. Metals通过LSP和BSP协议实现代码补全、错误检查、重构及sbt项目自动导入;3. 支持通过sbt shell启动REPL或使用Run Worksheet实现交互式编程;4. 虽无内置中文文档,但…

    2026年9月23日
    100
  • 优麒麟 25.10 版本正式发布

    优麒麟 25.10 正式版现已上线,此版本将提供长达9个月的支持周期,基于最新的 linux 6.17 内核打造,在基础库、子系统及核心组件等方面实现了全面升级,显著提升了系统的稳定性与兼容性,同时推出了焕然一新的软件商店。 新增特性 1. 搭载 Linux 6.17 内核 优麒麟 25.10 集成…

    2026年9月23日
    100
  • Java中基于栈验证JSON字符串结构有效性的方法

    本文探讨了在Java中利用栈(Stack)数据结构验证JSON字符串结构有效性的方法。我们将分析一个常见的基于栈的实现示例,指出其在处理字符串内部字符、引号平衡以及转义字符方面的潜在缺陷。文章将提供一个改进的解决方案,并强调此方法主要用于结构匹配,而非完整的JSON语法验证,同时建议生产环境中使用专…

    2026年9月23日
    200
  • Flink项目实践 | Flink 单机安装部署

    Flink项目实践 | Flink 单机安装部署Flink项目实践 | Flink 单机安装部署Flink项目实践 | Flink 单机安装部署Flink项目实践 | Flink 单机安装部署

    apache flink 是一个用于对无界和有界数据流进行状态计算的框架和分布式处理引擎。flink 设计旨在所有常见集群环境中运行,并以内存速度和任意规模进行计算。 为了深入了解 Flink,首先需要搭建其运行环境。 Flink 可以在所有类似 UNIX 的环境中运行,包括 Linux,Mac O…

    2026年9月23日 用户投稿
    200
  • Windows系统安装MySQL的完整步骤是什么?

    Windows系统安装MySQL的完整步骤是什么?Windows系统安装MySQL的完整步骤是什么?Windows系统安装MySQL的完整步骤是什么?Windows系统安装MySQL的完整步骤是什么?

    安装#%#$#%@%@%$#%$#%#%#$%@_81c++3b080dad537de7e10e0987a4bf52e前需准备系统兼容性、硬件资源、前置运行时库、管理员权限及排查端口冲突。1. 系统兼容性:确保使用windows 10/11或对应server版本;2. 硬件资源:建议至少4gb内存;…

    2026年9月23日 用户投稿
    300
  • UC浏览器怎么恢复已删除的书签_UC浏览器恢复已删除书签方法

    可通过回收站、账号同步或备份文件三种方法找回UC浏览器删除的书签:首先尝试在书签管理中进入回收站恢复近期删除的条目;若开启过同步功能,可登录UC账号重新同步云端数据;若有HTML格式的备份文件,可通过导入功能将书签重新载入。 如果您在使用UC浏览器时误删了重要的书签,导致无法快速访问常用网站,可以通…

    2026年9月23日
    100
  • Java JSON字符串有效性验证:基于栈的实现与常见陷阱

    本文深入探讨了使用Java栈结构验证JSON字符串有效性的方法。通过分析一个常见错误示例,详细阐述了在处理括号、方括号以及字符串引号时的正确逻辑,特别强调了字符串内部字符(包括转义字符)不应影响结构平衡的原则,并提供了改进思路,旨在帮助开发者构建健壮的JSON验证器。 JSON结构与栈的适用性 JS…

    2026年9月23日
    100
  • 悟空浏览器提示证书错误或无效怎么办_悟空浏览器证书错误或无效问题解决方案

    首先检查系统时间和日期是否准确,开启自动同步;其次清除悟空浏览器缓存或更新至最新版本;若为自签名证书可手动安装信任;排除安全类应用干扰并重置网络设置以解决证书错误问题。 如果您在使用悟空浏览器访问某个网站时,收到“证书错误”或“证书无效”的提示,这通常意味着浏览器无法验证该网站的安全证书,可能由系统…

    2026年9月23日
    000

发表回复

登录后才能评论
关注微信