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

BeautifulSoup的find_all()使用多AND条件筛选含a标签的sup标签问题

问题原因

你原有代码存在两个核心问题:

  • 只删除了sup标签内的a标签,没有把整个带链接的sup标签移除,导致删除a后残留空sup节点,还被额外加上了方括号
  • 最后打印的是原始html字符串,而非BeautifulSoup修改后的DOM结构,修改结果根本没有输出

正确实现代码

from bs4 import BeautifulSoup

html = '''<h1>
        <b> Heading </b>
      <sup>
        <a href="LINK_1">1</a>
      </sup>
    </h1>
    <p>
      <sup>2</sup>
      This is a paragraph
      <sup><a href="LINK_2">3</a></sup>
    </p>'''

soup = BeautifulSoup(html, "html.parser")

# 第一步:删除所有内部包含a标签的sup标签
for sup in soup.find_all("sup"):
    if sup.find("a"):
        sup.decompose()

# 第二步:给剩余不含链接的sup标签内容包裹方括号
for sup in soup.find_all("sup"):
    # 提取sup内文本并去除多余空白
    content = sup.get_text(strip=True)
    sup.string = f"[{content}]"

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

运行输出结果

<h1>
 <b>
  Heading
 </b>
</h1>
<p>
 <sup>
  [2]
 </sup>
 This is a paragraph
</p>

完全符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:04