我需要通过使用正确的嵌套顺序关闭任何打开的标签来清理用户提交的 HTML。我一直在寻找一种算法或Python代码来做到这一点,但除了PHP等中的一些半生不熟的实现之外,还没有找到任何东西。
例如,类似的东西
<p>
<ul>
<li>Foo
becomes
<p>
<ul>
<li>Foo</li>
</ul>
</p>
任何帮助,将不胜感激 :)
使用美丽汤:
from BeautifulSoup import BeautifulSoup
html = "<p><ul><li>Foo"
soup = BeautifulSoup(html)
print soup.prettify()
gets you
<p>
<ul>
<li>
Foo
</li>
</ul>
</p>
据我所知,您无法控制将
标记放在与 Foo 不同的行上。
使用整洁:
import tidy
html = "<p><ul><li>Foo"
print tidy.parseString(html, show_body_only=True)
gets you
<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)
becomes
<ul>
<li>Foo
</li>
</ul>
所有这些都有其优点和缺点,但希望其中之一足够接近。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)