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

使用BeautifulSoup写入文件时保留Django模板的空白字符

解决BeautifulSoup修改标签后保留原始HTML格式的问题

嘿,这个问题我太熟悉了!prettify()虽然能让输出的HTML看起来整齐,但它会强制重新格式化整个文档,把原有的缩进、空白甚至模板标签的排版都打乱,对Django这类需要保留原始格式的场景确实不友好。

解决方案:放弃prettify(),直接转换为字符串

你只需要把写入文件的代码从prettify()改成直接将soup对象转为字符串即可,这样BeautifulSoup只会修改你指定的元素,其余内容完全保留原始格式。

另外还要注意一个小坑:如果你的h1标签原本没有class属性,直接用tag['class'].append()会抛出KeyError,所以建议用更稳妥的写法来添加类。

修改后的完整脚本:

#!/usr/bin/env python
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('test.html'), 'html.parser')
heading_tags = soup.find_all('h1')
for tag in heading_tags:
    # 先确保class属性存在,不存在则创建空列表
    tag.attrs.setdefault('class', []).append('new-class')
with open('test.html', 'w') as html_doc:
    # 直接转换为字符串写入,保留原始格式
    html_doc.write(str(soup))

原理说明

str(soup)会输出BeautifulSoup解析后未经过格式化的原始内容,只应用了你对标签属性的修改,完全不会改动原文档的空白、缩进和其他结构,完美适配Django模板这类对格式敏感的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:01