用纯Python代码去除生成HTML中的空白字符
我正在使用Jinja2来生成HTML文件,这些文件通常非常大。我注意到生成的HTML里面有很多空白部分。有没有什么纯Python的工具可以用来减少这些HTML的大小?我说的“减少”是指去掉HTML中不必要的空白(就像谷歌做的那样——比如查看google.com的源代码)。
我不想依赖像tidy这样的库或外部程序。
为了进一步说明,里面几乎没有JavaScript代码,只有HTML内容。
3 个回答
4
我发现了一个叫做 python slimmer 的库,非常适合你需要做的事情。
from slimmer import html_slimmer # or xhtml_slimmer, css_slimmer
html = html_slimmer(html)
9
你也可以看看Jinja自带的空白控制功能,这可能会减少你在模板渲染后手动去除空白的需求。
引用文档中的内容:
不过你也可以手动在模板中去掉空白。如果你在一个块(比如一个for标签)、注释或变量表达式的开始或结束加上一个减号(-),就可以去掉那个块前后的空白:
{% for item in seq -%}
{{ item }}
{%- endfor %}
这样做会让所有元素之间没有空白。如果seq是从1到9的数字列表,输出就会是123456789。
-1
如果你只是想去掉多余的空白,可以使用:
>>> import re
>>> html_string = re.sub(r'\s\s+', ' ', html_string)
或者:
>>> html_string = ' '.join(html_string.split())
如果你想做一些比单纯去掉多余空白更复杂的事情,那你就需要用到更强大的工具(或者更复杂的正则表达式)。