用Python编写的HTML缩进器
我在找一个免费的(自由使用的)HTML格式化工具(或者说重新格式化工具),最好是用Python写的(可以是模块或者命令行工具)。我不需要用白名单来过滤HTML,只想把HTML代码整理一下,让它更容易阅读。例如,我有以下这段代码:
<ul><li>Item</li><li>Item
</li></ul>
输出结果可能会是这样的:
<ul>
<li>Item</li>
<li>Item</li>
</ul>
注意:我不想要一个非Python软件的接口(比如用C写的Tidy),我需要的是一个完全用Python写的脚本。
非常感谢。
5 个回答
7
使用BeautifulSoup
使用BeautifulSoup模块和它的美化功能有很多种方法。下面是一些例子,帮助你入门。
通过命令行
$ python -m BeautifulSoup < somefile.html > prettyfile.html
在VIM中(手动操作)
如果你不想把文件写回磁盘,其实可以不这样做,不过我还是加上了这一步,这样效果和命令行的例子是一样的。
$ vi somefile.html
:!python -m BeautifulSoup < %
:w prettyfile.html
在VIM中(定义快捷键)
在你的~/.vimrc文件中定义:
nmap =h !python -m BeautifulSoup < %<CR>
然后,当你在vim中打开一个需要美化的文件时
$vi somefile.html
=h
:w prettyfile.html
再次强调,保存美化后的内容是可选的。
Python Shell
$ python
>>> from BeautifulSoup import BeautifulSoup as parse_html_string
>>> from os import path
>>> uglyfile = path.abspath('somefile.html')
>>> path.isfile(uglyfile)
True
>>> prettyfile = path.abspath(path.join('.', 'prettyfile.html'))
>>> path.exists(prettyfile)
>>> doc = None
>>> with open(uglyfile, 'r') as infile, open(prettyfile, 'w') as outfile:
... # Assuming very simple case
... htmldocstr = infile.read()
... doc = parse_html_string(htmldocstr)
... outfile.write(doc.prettify())
# That's it; you can manually manipulate the dom too though
>>> scripts = doc.findAll('script')
>>> meta = doc.findAll('meta')
>>> print doc.prettify()
[imagine beautiful html here]
>>> import jsbeautifier
>>> print jsbeautifier.beautify(script.string)
[imagine beautiful script here]
>>>
8
你可以使用内置模块 xml.dom.minidom
的 toprettyxml
函数来实现这个功能:
>>> from xml.dom import minidom
>>> x = minidom.parseString("<ul><li>Item</li><li>Item\n</li></ul>")
>>> print x.toprettyxml()
<?xml version="1.0" ?>
<ul>
<li>
Item
</li>
<li>
Item
</li>
</ul>
3
BeautifulSoup有一个叫做prettify
的功能,可以做到这一点。查看这个问题