如何使用Python BeautifulSoup为标签组包裹外层元素标签?
使用BeautifulSoup为标签组包裹外层div标签
完全可以实现这个需求,核心思路是定位每个<h1>标签,将其和后续的兄弟<p>标签一同包裹到新创建的<div>中。以下是具体的实现代码:
from bs4 import BeautifulSoup # 原始HTML内容 html_content = """ <h1>Heading for Sec 1</h1> <p>some text sec 1</p> <p>some text sec 1</p> <p>some text sec 1</p> <h1>Heading for Sec 2</h1> <p>some text sec 2</p> <p>some text sec 2</p> <p>some text sec 2</p> <h1>Heading for Sec 3</h1> <p>some text sec 3</p> <p>some text sec 3</p> """ # 解析HTML soup = BeautifulSoup(html_content, 'html.parser') # 获取所有h1标签 h1_list = soup.find_all('h1') for h1 in h1_list: # 创建新的div容器 div_container = soup.new_tag('div') # 先把当前h1标签包裹进div h1.wrap(div_container) # 遍历h1的后续兄弟节点 next_node = h1.next_sibling while next_node is not None: # 遇到下一个h1就停止遍历 if next_node.name == 'h1': break # 只处理p标签(如果有其他需要包含的标签,可在此扩展判断) if next_node.name == 'p': # 将p标签从原来的位置移到div里 div_container.append(next_node.extract()) # 移动到下一个兄弟节点 next_node = next_node.next_sibling # 输出处理后的HTML print(soup.prettify())
代码逻辑说明
- 解析HTML:用BeautifulSoup加载原始HTML内容,生成可操作的DOM树。
- 定位h1标签:找到所有需要作为分组起点的
<h1>标签。 - 创建包裹容器:为每个
<h1>创建对应的<div>,并将<h1>包裹进去。 - 收集后续兄弟节点:遍历
<h1>之后的兄弟节点,把所有<p>标签移动到<div>中,直到遇到下一个<h1>为止。 - 输出结果:通过
prettify()方法格式化输出处理后的HTML,结构与你期望的完全一致。
内容的提问来源于stack exchange,提问作者elbourne
相关产品推荐
相关产品推荐

