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

如何用BeautifulSoup移除外层div标签并保留其内容?

如何用BeautifulSoup移除外层div标签并保留内部内容?

嘿,这事儿真的超简单!我来给你一步步讲清楚怎么实现——其实BeautifulSoup专门有个API就是干这个的,之前没找到可能是没留意到它~

核心方法:unwrap()

unwrap()是BeautifulSoup里专门用来移除当前标签,但将它的所有子内容(文本、嵌套标签等)保留在原位置的方法,完全匹配你要的需求。

举个实际例子

假设你的原始HTML结构是这样的:

原始HTML:

<div class="outer-wrapper">
  <p>这是一段内部文本</p>
  <a href="/test">这是一个链接</a>
  <div class="inner-box">嵌套的内层div</div>
</div>

我们要剥掉最外层的div.outer-wrapper,保留里面的所有内容,代码可以这么写:

from bs4 import BeautifulSoup

# 原始HTML字符串
raw_html = '''
<div class="outer-wrapper">
  <p>这是一段内部文本</p>
  <a href="/test">这是一个链接</a>
  <div class="inner-box">嵌套的内层div</div>
</div>
'''

# 解析HTML
soup = BeautifulSoup(raw_html, 'html.parser')

# 定位到目标外层div(这里用class定位,你也可以用id、标签名等选择器)
outer_div = soup.find('div', class_='outer-wrapper')

# 移除外层div,保留内部内容
if outer_div:  # 加个判断避免找不到标签时报错
    outer_div.unwrap()

# 输出处理后的HTML
print(soup.prettify())

运行后你会得到这样的结果:

<p>这是一段内部文本</p>
<a href="/test">这是一个链接</a>
<div class="inner-box">嵌套的内层div</div>

如果有多个外层div怎么办?

要是页面里有多个需要移除的外层div(比如多个同class的容器),用find_all循环处理就行:

raw_html = '''
<div class="outer-wrapper">内容1</div>
<div class="outer-wrapper">内容2</div>
<div class="outer-wrapper">内容3</div>
'''

soup = BeautifulSoup(raw_html, 'html.parser')

for outer_div in soup.find_all('div', class_='outer-wrapper'):
    outer_div.unwrap()

print(soup.prettify())

这个方法是不是比你想象的更直接?本质就是告诉BeautifulSoup:把这个标签“拆”掉,里面的东西原封不动留下~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:02:35