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

如何提取嵌套标签?求助从p标签中提取span标签的方法

提取p标签内嵌套的span标签方法及decompose错误解决

正确提取span标签的方法

要获取p标签里嵌套的span,直接在定位到p标签后,使用find('span')或select_one('span')即可定位目标元素。示例代码如下:

# 修正原代码的字符串格式(换行字符串需用三引号包裹)
html = """
<div id="tab-description" class="plugin-description section">
    <h2 id="description-header">Description</h2>
    <p><span class="embed-youtube" style="text-align:center; display: block;"><iframe class="youtube-player" src="https://www.youtube.com/"></iframe></span></p>
</div>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
# 定位目标p标签
p_tag = soup.find(id="tab-description").find('p')
# 提取p内的span标签
span_tag = p_tag.find('span')

# 按需获取span的属性或内容
# 获取span的class属性
print(span_tag.get('class'))
# 获取span的完整HTML代码
print(str(span_tag))

decompose()报错的原因及解决

decompose()是BeautifulSoup中用于删除指定标签及其内容的方法,并非提取标签的工具。你出现报错大概率是两种情况:

  1. 对None对象调用decompose():比如执行span = p_tag.find('span')后,页面中p内实际没有span,span返回None,此时调用span.decompose()会抛出AttributeError。
  2. 误用decompose()的用途:如果你的需求是移除p标签的包裹、保留span,可以用unwrap()方法替代:
# 移除span的父标签p,保留span本身
span_tag.unwrap()
# 此时span会被直接放到div标签下
print(soup.prettify())

内容的提问来源于stack exchange,提问作者Сергей Торопов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:50:44