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

BeautifulSoup提取内容时如何忽略嵌套标签内的文本?

解决方法

你原来的代码用.text会提取当前节点所有子孙节点的文本内容,所以会把嵌套span里的文本也一起拿出来。要只拿p标签本身的文本,只需要提取p标签的直接文本子节点即可,两种常用实现方案如下:

方案1:筛选直接文本子节点(不修改原DOM结构)

直接遍历p标签的contents属性,只保留属于文本类型的子节点,拼接后即可得到p标签本身的内容,不会改变原有soup的结构。

from bs4 import BeautifulSoup, NavigableString

# 前面的soup初始化逻辑保持不变
for price in soup.find_all('p', attrs={'class': 'price'}):
    # 过滤出直接文本子节点,拼接后去除首尾空白
    main_price = ''.join([content.strip() for content in price.contents if isinstance(content, NavigableString)])
    print(main_price)

方案2:先移除嵌套的span标签(适合需清理多个嵌套标签的场景)

先把p标签内部所有不需要的span节点从DOM中移除,再取text就是p本身的文本,该方案会修改原soup中对应节点的结构,适合后续不需要复用原有节点的场景。

for price in soup.find_all('p', attrs={'class': 'price'}):
    # 移除p标签内所有span节点
    for unwanted_span in price.find_all('span'):
        unwanted_span.extract()
    print(price.text.strip())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:18:01