如何用Python BeautifulSoup提取两个同级h2标签间的HTML内容
HTML按h2标签拆分数据集方案
最稳妥的实现方式是使用HTML DOM解析库直接遍历节点分组,完全不依赖标签内的文本内容匹配,从根源避免h2内容和p标签内容重复导致的拆分错误。
Python实现示例(基于BeautifulSoup)
依赖安装
执行命令安装所需库:
pip install beautifulsoup4 lxml
完整代码
from bs4 import BeautifulSoup # 替换为你爬虫获取的原始HTML文本 raw_html = """ <h2> header one </h2> <p> some text </p> <p> some more text </p> <h2> header two </h2> <p> text for header two </p> <p> more text for header two </p> <h2> header three </h2> <p> text for header three </p> """ # 初始化解析器 soup = BeautifulSoup(raw_html, 'lxml') groups = [] current_group = [] # 遍历所有直接子节点 for node in soup.body.children: # 跳过空白换行等无效节点 if node.name is None: continue # 遇到h2标签就创建新分组 if node.name == 'h2': if current_group: groups.append(current_group) current_group = [node] # p标签直接加入当前分组 else: current_group.append(node) # 存入最后一个分组 if current_group: groups.append(current_group) # 输出拆分后的数据集 for index, group in enumerate(groups, 1): print(f"数据集{index}:") group_html = '\n'.join([str(tag) for tag in group]) print(group_html) print("="*30)
逻辑说明
- 解析器会自动识别HTML标签类型,完全不需要匹配标签内的文本内容,不管h2和p的文本有没有重复都不会拆分错误
- 你如果用其他语言开发,也可以用对应生态的HTML解析库实现相同逻辑:JS用Cheerio、Java用Jsoup、Go用goquery,核心逻辑都是遍历节点、遇到h2就分割分组。
内容的提问来源于stack exchange,提问作者Leon Hauch
相关产品推荐
相关产品推荐

