如何提取嵌套标签?求助从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中用于删除指定标签及其内容的方法,并非提取标签的工具。你出现报错大概率是两种情况:
- 对
None对象调用decompose():比如执行span = p_tag.find('span')后,页面中p内实际没有span,span返回None,此时调用span.decompose()会抛出AttributeError。 - 误用
decompose()的用途:如果你的需求是移除p标签的包裹、保留span,可以用unwrap()方法替代:
# 移除span的父标签p,保留span本身 span_tag.unwrap() # 此时span会被直接放到div标签下 print(soup.prettify())
内容的提问来源于stack exchange,提问作者Сергей Торопов
相关产品推荐
相关产品推荐

