使用Selenium高效抓取层级结构数据:关联H2标题与P标签内容

使用Selenium高效抓取层级结构数据:关联H2标题与P标签内容

本文详细介绍了如何利用selenium和xpath技术,从具有层级结构的html文档中高效抓取数据。核心方法是关联每个`p`标签与其最近的`h2`标题,并将所有相关内容聚合,最终输出为结构化的python字典或列表,从而实现对网页内容的精准提取与组织。

在进行网页数据抓取时,经常会遇到内容按照标题进行分段的情况,例如一个h2标签后跟随多个p标签作为其内容,然后是下一个h2标签及其内容。直接抓取所有h2和p标签很容易,但如何将它们正确地关联起来,形成有逻辑结构的数据,是Web scraping中的一个常见挑战。本文将详细讲解如何使用Selenium结合XPath定位技术,有效地解决这一问题,将散乱的HTML元素转化为结构化的数据。

理解数据结构与抓取目标

假设我们有以下HTML结构:

Title1

text I want

text I want

Title2

text I want

text I want

text I want

Title3

text I want

text I want

我们的目标是提取每个h2标签的文本作为标题,并将其后直到下一个h2标签出现前的所有p标签内容聚合起来,作为该标题的详细内容。最终希望得到类似 [{‘title’: ‘Title1’, ‘content’: ‘text I want text I want’}, …] 的结构化数据。

核心策略:利用XPath的preceding-sibling定位

要实现标题与内容的关联,关键在于找到每个p标签对应的上级h2标题。XPath的preceding-sibling::h2[1]表达式是解决此问题的理想工具。它表示“选择当前节点之前的所有同级h2元素中的第一个”,即最近的一个h2同级元素。

结合Python的字典数据结构,我们可以先遍历所有h2标签,初始化一个字典,以h2的文本作为键,空字符串作为值。然后,遍历所有p标签,对于每个p标签,找到其最近的h2同级元素,并将p标签的文本追加到该h2对应的字典值中。

详细实现步骤

初始化Selenium WebDriver:设置并启动浏览器驱动。加载HTML内容:将目标HTML加载到浏览器中。初始化数据字典:使用driver.find_elements(By.CSS_SELECTOR, ‘h2’)找到所有h2元素。创建一个字典,其中键是每个h2元素的文本内容,初始值为空字符串。遍历并聚合p标签内容:使用driver.find_elements(By.CSS_SELECTOR, ‘p’)找到所有p元素。遍历每个p元素:使用p.find_element(By.XPATH, ‘./preceding-sibling::h2[1]’)找到该p标签最近的h2同级元素。提取该h2元素的文本作为键。将当前p标签的文本追加到字典中对应键的值上。构建结构化输出:将字典转换为更易于处理的列表,例如列表中的字典。

示例代码

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManagerimport time# 1. 初始化Selenium WebDriver# 推荐使用webdriver_manager自动管理驱动service = Service(ChromeDriverManager().install())driver = webdriver.Chrome(service=service)# 2. 加载HTML内容# 这里使用data URI加载一个字符串HTML,实际应用中替换为driver.get("your_url_here")html_content = '''

Title1

text I want 1.1

text I want 1.2

Title2

text I want 2.1

text I want 2.2

text I want 2.3

Title3

text I want 3.1

text I want 3.2

'''driver.get("data:text/html;charset=utf-8," + html_content)time.sleep(1) # 给浏览器一些时间加载内容# 3. 初始化数据字典# 遍历所有h2元素,以其文本为键,空字符串为值初始化字典# 注意:h2.text 会自动处理内部的span标签,提取出正确的文本data_mapping = dict((h2_element.text, '') for h2_element in driver.find_elements(By.CSS_SELECTOR, 'h2'))# 4. 遍历并聚合p标签内容# 遍历所有p元素for p_element in driver.find_elements(By.CSS_SELECTOR, 'p'): # 找到当前p元素最近的前一个h2同级元素 # XPath './preceding-sibling::h2[1]' 表示当前节点(.)之前(preceding-sibling)的h2元素中的第一个([1]) try: preceding_h2 = p_element.find_element(By.XPATH, './preceding-sibling::h2[1]') h2_text = preceding_h2.text # 将p标签的文本追加到对应h2键的值中,用空格分隔 data_mapping[h2_text] += ' ' + p_element.text except Exception as e: print(f"Error processing p tag: {p_element.text}. No preceding h2 found or other error: {e}") # 可以选择跳过或记录此类p标签# 5. 构建结构化输出# 将字典转换为列表,每个元素是一个包含'title'和'content'键的字典structured_output = [{'title': title, 'content': content.strip()} for title, content in data_mapping.items()]# 打印结果print(structured_output)# 关闭浏览器driver.quit()

输出结果

运行上述代码,将得到以下结构化输出:

[{'title': 'Title1', 'content': 'text I want 1.1 text I want 1.2'}, {'title': 'Title2', 'content': 'text I want 2.1 text I want 2.2 text I want 2.3'}, {'title': 'Title3', 'content': 'text I want 3.1 text I want 3.2'}]

注意事项与最佳实践

XPath的准确性:preceding-sibling::h2[1]是关键。如果HTML结构复杂,例如p标签和h2之间有其他不相关的同级元素,此XPath仍能正确找到最近的h2。如果需要查找更远的祖先元素,可能需要使用ancestor::或其他更复杂的XPath表达式。错误处理:在实际网页抓取中,HTML结构可能不完全规范。例如,如果某个p标签前面没有h2标签,p_element.find_element()会抛出NoSuchElementException。在示例代码中,我们加入了try-except块来处理这种情况,增强了代码的健壮性。文本清理:p.text提取的文本可能包含多余的空格或换行符。在将内容追加到字典值之前或之后,可以使用strip()、replace()等方法进行清理。示例代码在最终输出时对content进行了strip()处理。性能考量:对于非常大的HTML文档,多次调用find_element可能会有性能开销。然而,对于大多数常见场景,这种方法是高效且易于理解的。数据结构选择:将最终数据组织成列表中的字典 ([{‘title’: x, ‘content’: y}, …]) 是推荐的做法,因为它提供了清晰的键值对,方便后续的数据处理和分析。

总结

通过结合Selenium的元素查找能力和XPath强大的轴定位功能,我们可以高效地从复杂的HTML结构中提取并组织数据。preceding-sibling::h2[1]技巧在处理标题与内容关联的场景中尤为实用,它允许我们以编程方式模拟人类阅读时的上下文理解,从而将非结构化的网页内容转化为清晰、可用的结构化数据。掌握这种方法,将大大提升Web scraping的灵活性和效率。

以上就是使用Selenium高效抓取层级结构数据:关联H2标题与P标签内容的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何移除 Blogger 博客中所有文章的“Read More”按钮
上一篇 2025年12月23日 06:38:53
JavaScript实现多文件输入框图片独立预览与状态更新教程
下一篇 2025年12月23日 06:39:05

相关推荐

  • MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法MAC如何安全移除外置硬盘_macOS正确推出外置磁盘与U盘方法

    答案:可通过桌面图标、访达、拖拽至废纸篓、菜单栏图标、快捷键或终端命令安全弹出外置设备。具体操作包括右键点击桌面图标选择推出、在访达侧边栏点击弹出按钮、拖动设备图标到废纸篓、从菜单栏状态图标选择弹出、使用Command+E快捷键,或在终端输入diskutil unmountDisk命令完成弹出,确保…

    2026年9月27日 • 用户投稿
    000
  • qq浏览器怎么清理缓存和cookie QQ浏览器缓存与Cookie数据清理步骤

    qq浏览器怎么清理缓存和cookie QQ浏览器缓存与Cookie数据清理步骤qq浏览器怎么清理缓存和cookie QQ浏览器缓存与Cookie数据清理步骤qq浏览器怎么清理缓存和cookie QQ浏览器缓存与Cookie数据清理步骤qq浏览器怎么清理缓存和cookie QQ浏览器缓存与Cookie数据清理步骤

    首先清理缓存与Cookie可解决QQ浏览器网页加载异常等问题,通过“我的”-“设置”-“清除浏览数据”勾选缓存文件和Cookie后点击立即清除;其次可启用无痕浏览模式,从菜单进入后所有数据在关闭窗口后自动清除;最后针对特定网站问题,长按地址栏进入网站详情页单独清除该站点数据,不影响其他登录状态。 如…

    2026年9月27日 • 用户投稿
    100
  • 如何使用update

    如何使用update如何使用update如何使用update如何使用update

    Update的用法,需要具体代码示例 在编程中,我们经常需要对数据进行更新操作。在许多编程语言和数据库中,都提供了update语句或者update函数来实现数据的更新功能。在本文中,我们将介绍update的用法,并提供具体的代码示例来帮助读者更好地掌握这一技术。 一、update的基本语法 在大多数…

    2026年9月27日 • 用户投稿
    100
  • Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化Stripe Webhook签名验证错误解析与中间件顺序优化

    Stripe Webhook签名验证时出现”Payload must be provided as a string or a Buffer”错误,通常是由于Express应用中全局express.json()中间件过早解析了原始请求体。本文将深入解析此问题,并提供通过调整中…

    2026年9月27日 • 用户投稿
    000
  • OpenAI 推出全新 AI 功能 ChatGPT Pulse

    OpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT PulseOpenAI 推出全新 AI 功能 ChatGPT Pulse

    openai 宣布上线全新功能 chatgpt pulse,标志着 chatgpt 正式从被动响应式对话工具进化为具备主动服务能力的个性化助手。该功能目前以预览版本的形式率先登陆移动端,仅对 pro 订阅用户(每月 200 美元)开放使用权限。 据官方介绍,Pulse 是 ChatGPT 全新打造的…

    2026年9月27日 • 用户投稿
    100
  • windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法windows怎么查看电脑支持的内存大小 windows查看电脑最大支持内存方法

    首先通过命令提示符输入wmic memphysical get maxcapacity获取主板最大支持内存,再结合CPU-Z等工具或官网规格确认具体参数,最后用任务管理器查看插槽使用情况以规划升级方案。 如果您计划升级电脑内存,但不确定主板或系统最大支持多大的内存容量,则需要准确查询硬件的限制。以下…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置sublime怎么设置在按下回车时自动缩进_sublime按回车自动缩进设置

    确保”auto_indent”: true已启用,使新行继承上一行缩进;2. 检查并正确设置文件语法类型,确保语言识别无误;3. 推荐配置”translate_tabs_to_spaces”: true和”tab_size”: …

    2026年9月27日 • 用户投稿
    200
  • JScrollPane滚动条自动更新行为的控制策略与实践

    JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践JScrollPane滚动条自动更新行为的控制策略与实践

    本教程详细探讨如何有效控制JScrollPane的滚动条自动更新行为,特别是在内容重绘后避免意外滚动。文章重点介绍通过设置滚动条策略(如ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)来禁用滚动条或其自动更新,并简要提及Viewport尺寸调整的替代方法…

    2026年9月27日 • 用户投稿
    000
  • iCloud官网怎么使用隐藏邮件_iCloud隐藏邮件地址功能

    iCloud官网怎么使用隐藏邮件_iCloud隐藏邮件地址功能iCloud官网怎么使用隐藏邮件_iCloud隐藏邮件地址功能iCloud官网怎么使用隐藏邮件_iCloud隐藏邮件地址功能iCloud官网怎么使用隐藏邮件_iCloud隐藏邮件地址功能

    使用iCloud+“隐藏邮件地址”功能可保护真实邮箱,通过iPhone设置或iCloud官网创建唯一转发邮箱,支持添加标签、启用垃圾邮件防护,并可随时停用或删除已创建的地址。 如果您希望在注册网站或服务时保护您的真实电子邮件地址,iCloud+ 提供的“隐藏邮件地址”功能可以生成一个唯一的、可转发的…

    2026年9月27日 • 用户投稿
    500
  • C# .NET中基于JWT和外部授权服务器的REST API安全配置指南

    C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南C# .NET中基于JWT和外部授权服务器的REST API安全配置指南

    本文旨在提供一个简洁明了的教程,指导开发者如何在C# .NET应用中,以纯资源服务器模式,通过外部授权服务器(如AWS Cognito或Asgardeo)实现REST API的安全保护。文章将重点介绍如何利用JWT Bearer认证机制,通过最小化配置,快速构建一个能够验证传入访问令牌的API服务,…

    2026年9月27日 • 用户投稿
    100
  • 京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!京东拼购入驻,所需条件与费用有哪些?详解商家资质、经验要求及质保金、平台费、扣点明细!

    在电商迅猛发展的当下,京东拼购为大量商家开辟了一个充满潜力的销售渠道。然而,若想成功入驻该平台,商家必须清楚了解其入驻门槛及相关费用信息。这不仅有助于提前筹备相关材料,还能有效提升审核通过率,助力商家快速切入这一活跃市场,开启线上增长新篇章。 一、京东拼购入驻条件 (一)基本资质要求 1. 持有有效…

    2026年9月27日 • 用户投稿
    200
  • linux Kernel

    linux Kernellinux Kernellinux Kernellinux Kernel

    探索linux内核的奥秘,从基础到高级,逐步揭开其神秘面纱。无论你是初学者还是资深开发者,本文都将为你提供深入了解linux内核所需的知识和工具。 以上就是linux Kernel的详细内容,更多请关注创想鸟其它相关文章!

    2026年9月27日 • 用户投稿
    100
  • AZ录屏画笔使用技巧

    AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧AZ录屏画笔使用技巧

    az屏幕录制是一款功能多样的录屏软件,除了提供常规的录屏操作外,还拥有许多实用的附加功能,比如在录制时可使用的画笔标注功能。 1、 打开手机中的AZ屏幕录制应用 2、 进入应用设置界面后向下滑动,找到“录制工具”相关选项 3、 开启画笔功能后,屏幕上将会出现画笔图标 笔魂AI 笔魂AI绘画-在线AI…

    2026年9月27日 • 用户投稿
    000
  • win8如何查看windows体验指数_Win8体验指数查看方法

    win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法win8如何查看windows体验指数_Win8体验指数查看方法

    1、可通过控制面板或运行命令查看Windows体验指数。首先在控制面板中进入“系统和安全”→“操作中心”→“维护”→“查看性能信息”,即可查看总分及各硬件子分数;或使用“Win+R”输入“shell:games”打开游戏文件夹,右键空白处选择“属性”,直接查看Windows体验指数的基准分数和各项子…

    2026年9月27日 • 用户投稿
    100
  • 豆包AI如何实现智能排版 豆包AI文档自动格式化功能

    豆包AI提供的智能排版功能,能够显著提升文档处理效率。本文将详细介绍如何利用豆包AI的文档自动格式化能力,解决文档排版耗时的问题。我们将逐步解析使用该功能的过程,包括如何启用、输入内容以及完成格式化,以便用户能够轻松掌握并应用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 …

    2026年9月27日
    100
  • VSCode如何实现代码片段云端同步 VSCode代码片段跨设备同步方案

    vscode实现代码片段云端同步的核心是将代码片段存储于云端并通过扩展或服务在多设备间同步;2. 可通过settings sync扩展结合github gist同步设置与代码片段;3. 可将代码片段文件夹置于dropbox、google drive等云存储服务中实现自动同步;4. 可使用git私有仓…

    2026年9月27日
    200
  • Java Swing GUI:构建交互式逻辑门(AND门示例)

    Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)

    本文详细介绍了如何使用Java Swing构建一个简单的AND逻辑门GUI应用。通过结合JCheckBox作为输入和JLabel作为视觉输出,并利用ChangeListener监听组件状态变化,实现当两个复选框都被选中时显示“绿色”,否则显示“红色”的功能。教程涵盖了组件创建、事件监听以及将自定义面…

    2026年9月27日 • 用户投稿
    100
  • AI Overviews如何设置智能告警 AI Overviews异常检测阈值

    AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值AI Overviews如何设置智能告警 AI Overviews异常检测阈值

    本文将详细指导您如何在AI Overviews中设置智能告警以及调整异常检测阈值,帮助您及时发现并响应潜在问题。我们将分步骤讲解具体操作过程,确保您能够顺利配置这些关键功能,从而实现更主动、更精准的系统监控。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年9月27日 • 用户投稿
    000
  • 360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法

    360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法360极速浏览器收藏夹栏怎么显示_360极速浏览器显示或隐藏书签栏的方法

    360极速浏览器书签栏未显示时,可通过快捷键Ctrl+Shift+B切换,或在菜单“工具”中点击“显示书签栏”,也可在“设置-外观”中开启默认显示。 如果您希望在浏览网页时快速访问常用网站,但发现360极速浏览器的收藏夹栏未显示,可能是书签栏被隐藏了。以下是恢复显示书签栏的操作方法。 本文运行环境:…

    2026年9月27日 • 用户投稿
    100
  • MAC怎么完全重置恢复到出厂设置_macOS恢复出厂设置与抹掉所有内容指南

    MAC怎么完全重置恢复到出厂设置_macOS恢复出厂设置与抹掉所有内容指南MAC怎么完全重置恢复到出厂设置_macOS恢复出厂设置与抹掉所有内容指南MAC怎么完全重置恢复到出厂设置_macOS恢复出厂设置与抹掉所有内容指南MAC怎么完全重置恢复到出厂设置_macOS恢复出厂设置与抹掉所有内容指南

    推荐使用“抹掉所有内容和设置”功能,进入系统设置-通用-传输或还原,点击抹掉按钮并输入密码,Mac将自动清除数据并重装系统;02. 若无法正常启动,可尝试通过恢复模式手动操作,关机后长按电源键进入启动选项,选择“选项”进入恢复模式,使用磁盘工具抹掉硬盘(格式选APFS),再重新安装macOS;03.…

    2026年9月27日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信