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

使用BeautifulSoup添加strong标签遇空格问题及HTML压缩需求

解决方案

一、修复strong标签前后的多余空格问题

你的代码中,正则匹配范围包含了关键词前后的空格,导致strong标签包裹了带空格的内容。可以通过调整正则逻辑,精准捕获关键词本身,将空格剥离到标签外部:

修改后的代码如下:

text = el.text
el.clear()
# 转义关键词,避免正则特殊字符干扰
escaped_keyword = re.escape(keyword)
# 匹配关键词及前后可能的空格,单独捕获关键词部分
match = re.search(r'\s*({})\s*'.format(escaped_keyword), text, re.IGNORECASE)
if match:
    # 整个匹配段(含前后空格)的起止位置
    full_start, full_end = match.start(), match.end()
    # 关键词本身的起止位置
    keyword_start, keyword_end = match.start(1), match.end(1)
    
    # 拼接前面的文本 + 匹配段前的空格
    el.append(text[:full_start] + text[full_start:keyword_start])
    
    # 创建strong标签并插入纯关键词
    strong_tag = soup.new_tag('strong')
    strong_tag.append(text[keyword_start:keyword_end])
    el.append(strong_tag)
    
    # 拼接匹配段后的空格 + 剩余文本
    el.append(text[keyword_end:full_end] + text[full_end:])

这样处理后,strong标签内只会包含关键词本身,前后空格保留在标签外部,可解决逗号位置怪异的问题。

二、输出压缩格式的HTML(无换行缩进)

BeautifulSoup默认的decode方法会自动格式化HTML,要生成紧凑的无换行格式,需指定formatter="minimal"参数:

替换原来的soup.decode('utf-8')为:

# 输出紧凑的HTML字符串
compressed_html = soup.decode(formatter="minimal")

若需要字节流,可使用:

compressed_html_bytes = soup.encode('utf-8', formatter="minimal")

formatter="minimal"会移除不必要的空格、换行和缩进,生成你期望的<p>some text <strong>strong</strong> rest of the paragraph</p>格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:48:25