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

使用BeautifulSoup生成HTML时换行符转义异常的解决咨询

解决BeautifulSoup中HTML换行标签被转义的问题

当你直接给BeautifulSoup的Tag对象的string属性赋值包含<br>的字符串时,BeautifulSoup会自动转义所有HTML特殊字符,导致<br>被转换成&lt;br&gt;,无法实现换行效果。下面是几种可行的解决方法:

方案一:拆分内容,逐个添加文本与换行标签

不需要提前拼接字符串,直接遍历列表内容,将每行文本和<br>标签依次加入<p>标签,最后移除多余的末尾换行标签:

lines = ['a', 'b', 'c', 'd']
soup = BeautifulSoup(open('simple.html'), 'html.parser')
sentences = soup.new_tag('p')

for line in lines:
    sentences.append(line)
    sentences.append(soup.new_tag('br'))

# 移除最后一个多余的<br>
if sentences.contents:
    sentences.contents.pop()

soup.body.div.append(sentences)

方案二:将带换行标签的字符串解析为HTML片段后添加

先把替换换行符后的字符串解析成HTML对象,再将其内容插入<p>标签:

lines = ['a', 'b', 'c', 'd']
string = ''
for line in lines:
    string = string + line + '\n'

replaced_string = string.replace('\n', '<br>')

soup = BeautifulSoup(open('simple.html'), 'html.parser')
sentences = soup.new_tag('p')
# 解析字符串为HTML结构并添加
sentences.append(BeautifulSoup(replaced_string, 'html.parser'))

soup.body.div.append(sentences)

方案三:使用NavigableString手动拼接内容

通过NavigableString创建纯文本节点,搭配<br>标签实现换行:

from bs4 import NavigableString

lines = ['a', 'b', 'c', 'd']
soup = BeautifulSoup(open('simple.html'), 'html.parser')
sentences = soup.new_tag('p')

for line in lines:
    sentences.append(NavigableString(line))
    sentences.append(soup.new_tag('br'))

if sentences.contents:
    sentences.contents.pop()

soup.body.div.append(sentences)

核心原因:Tag.string属性仅支持纯文本内容,BeautifulSoup会自动转义所有HTML标记以确保内容作为文本显示。若要插入可解析的HTML标签,必须通过添加Tag对象或解析后的HTML片段实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:55:21