如何用BeautifulSoup提取div中sup标签内容并移除img标签?
解决方案
方法1:直接提取<sup>标签内容(最简单)
如果核心需求只是获取<sup>里的文本,完全不需要先处理<img>相关元素,直接定位标签提取内容即可:
from bs4 import BeautifulSoup html = """<div>Hello everyone how are you<sup>Hello hi</sup><figure>Blah Blah<img /><figure></div>""" soup = BeautifulSoup(html, 'html.parser') # 直接定位sup标签并提取文本 sup_text = soup.find('sup').get_text(strip=True) print(sup_text) # 输出: Hello hi
方法2:清理<img>相关元素后保留<sup>
如果需要先移除<img>及包含它的容器(比如示例里的<figure>),再处理内容,要精准定位待删除的元素,避免误删<sup>:
from bs4 import BeautifulSoup html = """<div>Hello everyone how are you<sup>Hello hi</sup><figure>Blah Blah<img /><figure></div>""" soup = BeautifulSoup(html, 'html.parser') target_div = soup.find('div') # 方案A:删除所有<img>标签 for img in target_div.find_all('img'): img.decompose() # 方案B:删除包含<img>的整个<figure>标签(更彻底) for figure in target_div.find_all('figure'): figure.decompose() # 此时div里已无img相关内容,再提取sup文本 sup_text = target_div.find('sup').get_text(strip=True) print(sup_text) # 输出: Hello hi
为什么之前decompose()会破坏<sup>?
大概率是你在选择待删除元素时范围过大,比如误删了<div>下的所有子元素,或者错误地将<sup>也纳入了删除列表。只要精准定位到<img>或其容器(如<figure>)进行删除,就不会影响<sup>标签。
内容的提问来源于stack exchange,提问作者Pradeep Karthik Muthusamy
相关产品推荐
相关产品推荐

