如何修复错误嵌套/未关闭的HTML标签?


问题内容

我需要通过关闭所有具有正确嵌套顺序的打开标签来清理用户提交的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>

据我所知,您无法控制将