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

如何优化BeautifulSoup替换class为i的span为i标签并保留内容的代码

标签替换优化方案

你的原有实现逻辑通顺,能正确完成「保留内部内容替换外层标签」的需求,但确实存在更简洁的实现方式:

最优简化写法

BeautifulSoup的Tag对象本身支持直接修改name属性,无需通过「新建i标签包裹→拆解原有span标签」的两步操作:

from bs4 import BeautifulSoup

markup = '<div>abdef<span class="i">xyz<b>012</b>pqr</span>trs</div>'
soup = BeautifulSoup(markup, 'html.parser')

for span_tag in soup.find_all('span', class_='i'):
    # 直接修改标签名
    span_tag.name = 'i'
    # 不需要保留原span的class属性可新增下面这行
    del span_tag['class']

执行后输出的结果完全符合要求:

<div>abdef<i>xyz<b>012</b>pqr</i>trs</div>

方案优势

  • 逻辑更直观,代码量较原有版本减少近一半
  • 执行效率更高,省去了新建标签、包裹、拆解三个冗余操作
  • 适配性更强,默认保留原span的其余属性(如id、自定义属性等),如有需要也可以灵活删除

特殊场景适配

如果需求是完全清除原span的所有属性,只保留标签和内部内容,可以用下面的写法:

for span_tag in soup.find_all('span', class_='i'):
    span_tag.name = 'i'
    # 清空所有属性
    span_tag.attrs = {}

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

相关产品推荐
方舟 Agent Plan

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

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