我需要通过关闭所有具有正确嵌套顺序的打开标签来清理用户提交的HTML。我一直在寻找一种算法或Python代码来执行此操作,但除了PHP中的一些半熟实现之外,没有发现任何东西。
例如,类似
<p> <ul> <li>Foo
变成
<p> <ul> <li>Foo</li> </ul> </p>
任何帮助,将不胜感激 :)
使用BeautifulSoup:
from BeautifulSoup import BeautifulSoup html = "<p><ul><li>Foo" soup = BeautifulSoup(html) print soup.prettify()
让你
<p> <ul> <li> Foo </li> </ul> </p>
据我所知,您无法控制将
使用Tidy:
import tidy html = "<p><ul><li>Foo" print tidy.parseString(html, show_body_only=True)
<ul> <li>Foo</li> </ul>
不幸的是,我无法在示例中保留
标记。Tidy将其解释为空段落,而不是未封闭的段落,因此
print tidy.parseString(html, show_body_only=True, drop_empty_paras=False)
出来作为
<p></p> <ul> <li>Foo</li> </ul>
最终,当然,示例中的
标记是多余的,因此丢失它可能会很好。
最后,Tidy还可以缩进:
print tidy.parseString(html, show_body_only=True, indent=True)
<ul> <li>Foo </li> </ul>
所有这些都有起伏,但希望其中之一足够接近。