
使用 append() 直接插入 HTML 字符串会导致标签被自动转义(如 变成 ),根本原因是 BeautifulSoup 将字符串视为纯文本而非 HTML 结构;应通过 soup.new_tag() 创建真实标签对象再插入。
使用 `append()` 直接插入 html 字符串会导致标签被自动转义(如 `
` 变成 `
`),根本原因是 beautifulsoup 将字符串视为纯文本而非 html 结构;应通过 `soup.new_tag()` 创建真实标签对象再插入。
在使用 Beautiful Soup 修改 HTML 文档时,一个常见误区是直接将 HTML 字符串(如 "<p>Hello</p>")用 append() 添加到 soup.body 或其他节点中。此时 BeautifulSoup 不会解析该字符串为 DOM 节点,而是将其作为普通文本(NavigableString)处理,并在序列化(str(soup))时自动对 , <code>>, & 等字符进行 HTML 实体转义,导致输出中出现 <p>exampletext</p> 这类不可用的源码。
✅ 正确做法:使用 soup.new_tag() 构造真正的标签对象,并设置内容:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
from bs4 import BeautifulSoup
# 正确读取含韩文的 HTML(推荐显式指定 parser 和 encoding)
with open("test/test.html", "r", encoding="utf-8") as f:
soup = BeautifulSoup(f, "html.parser")
# ✅ 创建新标签并插入(保留语义结构,不转义)
p = soup.new_tag("p")
p.string = "exampletext" # 纯文本内容(支持 UTF-8,如 "안녕하세요")
soup.body.append(p)
# 若需插入带子元素的复杂结构,可链式构建:
div = soup.new_tag("div", **{"class": "notice"})
span = soup.new_tag("span")
span.string = "중요 정보"
div.append(span)
soup.body.append(div)⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
- ❌ 避免
soup.body.append("<p>...</p>")—— 这永远触发转义; - ✅ 如需批量插入已解析的 HTML 片段,可用
BeautifulSoup(..., "html.parser").body.contents提取后extend(),或使用soup.body.append(BeautifulSoup("<p>...</p>", "html.parser").body.p); - 文件读写统一使用
encoding="utf-8"(Python 3.10+ 中'UTF8'已弃用,应写作'utf-8'); - 若原始 HTML 声明了
<meta charset="euc-kr">嶺


















