You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中为标题标签间的HTML内容嵌套包裹section标签

嘿,我来帮你实现这个在Python中给HTML内容按层级自动包裹<section>标签的需求!咱们可以借助BeautifulSoup来轻松解析和修改HTML结构,下面是具体的实现方案:

思路解析

核心逻辑是跟踪标题的层级关系:h2对应一级<section>,h3对应嵌套在当前一级section里的二级section。遇到新的h2就开启新的一级section,遇到h3则在当前一级section内开启二级section,把后续的段落内容自动归类到对应的section中。

代码实现

首先确保你已经安装了BeautifulSoup(Python处理HTML的神器):

pip install beautifulsoup4

然后是完整的处理代码:

from bs4 import BeautifulSoup

# 你的原始HTML内容
raw_html = """<h2>Heading 2.1</h2> <p>Para 1</p> <p>Para 2</p> <h3>Heading 3.1</h3> <p>Para 3</p> <p>Para 4</p> <h2>Heading 2.2</h2> <p>Para 5</p> <h3>Heading 3.2</h3> <p>Para 6</p>"""

# 解析HTML
soup = BeautifulSoup(raw_html, 'html.parser')
# 获取所有顶级元素(去掉空文本节点)
elements = [elem for elem in list(soup.children)[0].contents if elem.name]

result = []
level1_counter = 1
level2_counter = 1
# 用栈管理嵌套的section,确保关闭顺序正确
section_stack = []

for elem in elements:
    if elem.name == 'h2':
        # 先关闭所有已打开的section
        while section_stack:
            result.append('</section>')
            section_stack.pop()
        
        # 创建新的一级section
        new_section = f'<section id="{level1_counter}">'
        result.append(new_section)
        section_stack.append('section')
        # 加入h2内容
        result.append(str(elem))
        level1_counter += 1
        level2_counter = 1  # 重置二级计数器
    elif elem.name == 'h3':
        # 创建二级section
        sec_id = f'{level1_counter - 1}.{level2_counter}'
        new_section = f'<section id="{sec_id}">'
        result.append(new_section)
        section_stack.append('section')
        # 加入h3内容
        result.append(str(elem))
        level2_counter += 1
    elif elem.name == 'p':
        # 把段落加到当前最内层的section里
        result.append(str(elem))

# 关闭所有剩余未闭合的section
while section_stack:
    result.append('</section>')
    section_stack.pop()

# 拼接成最终HTML
final_html = ' '.join(result)
print(final_html)

代码说明

  1. 用BeautifulSoup解析原始HTML,过滤掉空文本节点,只处理有效元素;
  2. 用两个计数器分别管理一级、二级section的编号,自动生成带规则的id;
  3. 用栈来跟踪当前打开的section,遇到新的一级标题时会先关闭所有已打开的section,避免层级混乱;
  4. 段落内容会自动归入最近打开的section中,完美匹配你想要的嵌套结构。

运行这段代码后,输出的HTML就是你期望的结构啦!

内容的提问来源于stack exchange,提问作者David Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:07:45