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
相关产品推荐
相关产品推荐

