
本文详细介绍了如何使用BeautifulSoup和html2text库从复杂的HTML结构中,有效地提取并分离段落(p标签)和表格(table标签)内容。核心在于通过正确的变量作用域管理和累加器机制,将连续的段落内容合并为一项,并在遇到表格时将其作为独立项处理,从而实现对混合HTML内容的结构化提取。
在进行网页数据抓取和内容处理时,我们经常需要从HTML文档中提取特定类型的信息,并按照一定的逻辑进行分组。一个常见的场景是,我们需要将连续的文本段落(由
标签表示)合并成一个整体,而当遇到表格(由
| 表格1数据 |
这是第三段内容。
#这是第四段内容。
#| 表格2数据 |
这是第五段内容。
#上述代码的问题在于,content_dict 在每次 for 循环迭代时都会被重新创建并清空。这意味着,当处理一个
标签时,它只能捕获当前这一个
标签的内容;而当下一个
标签到来时,content_dict 已经是一个全新的空字典,导致前一个
标签的内容丢失,无法实现连续段落的合并。同样,在遇到
| Header 1 | Header 2 |
|---|---|
| 表格1数据A | 表格1数据B |
| 表格1数据C | 表格1数据D |
这是第三段内容。
这是第四段内容。
| Col A | Col B |
|---|---|
| 表格2数据X | 表格2数据Y |
这是第五段内容。
这是一个嵌套的段落。
这是第六段内容。
标签内容的缓冲区 current_paragraph_accumulator = [] # 为了确保处理顺序,我们通常会遍历一个共同父元素的直接子节点 # 这里假设所有相关 p 和 table 标签都是 #main-content 的直接子节点 # 如果文档结构更复杂,可能需要调整遍历策略 target_container = soup.find(id='main-content') if not target_container: # 如果没有找到特定容器,则遍历 soup 的直接子节点 # 或者根据实际HTML结构选择更合适的父元素 target_container = soup # 遍历目标容器的直接子节点,而不是所有后代,以保持内容的顺序性 for tag in target_container.children: # 忽略 NavigableString(文本节点)和非元素标签 if isinstance(tag, NavigableString) or not hasattr(tag, 'name'): continue if tag.name == "p": # 将
标签的内容添加到累加器 current_paragraph_accumulator.append(converter.handle(str(tag))) elif tag.name == "table": # 如果累加器中有内容,先将其作为一项添加 if current_paragraph_accumulator: combined_p_content = "".join(current_paragraph_accumulator).strip() if combined_p_content: # 确保内容不为空白 content_items.append({ 'Title': "35.23.060 - DR Zone Standards", 'Content': combined_p_content }) current_paragraph_accumulator = [] # 清空累加器 # 然后将当前
相关文章
如何在前端根据数值动态设置文字颜色
将PDF法律合同精准拆分为结构化HTML并提取章节内容
如何使用 Python 逐行读取 URL 列表并依次解析每个网页内容
如何将PDF合同按章节提取为结构化HTML或富文本文件
如何用Python爬取网页数据?
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。
293
2023.11.13
if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。
776
2023.08.22
js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。
298
2023.08.03
js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。
212
2023.09.04
java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。
1500
2023.10.24
字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。
623
2023.11.24
Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。
613
2024.03.22
2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。
142
2026.01.28
热门下载
相关下载
精品课程
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号



