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

