Python - lxml 库 'clean' 方法仅删除空 <li> 节点的一半

标签 python lxml html-sanitizing lxml.html

我正在使用 Python 中的 lxml 库从我不想要的潜在有害代码/部分中清除 html 页面。我注意到函数中有一个奇怪的行为:当给定一个空的 <li> 时节点,它删除关闭 </li>标记但不是开头的标记。

例如,

from lxml.html.clean import Cleaner
text = '<ul><li></li><li>FooBar</li></ul>'
cleaner = Cleaner()
print cleaner.clean_html(text)

将输出 <ul><li><li>FooBar</li></ul> ...

据我所知,这只会在处理 <li> 时发生标签。那是 lxml 库中的错误吗?我做错了什么吗?

如有任何见解,我们将不胜感激。谢谢!

最佳答案

closing tag for <li> in HTML is optional ,所以它不是错误,尽管它可能不是您想要的行为。

您可以通过将其打印为 XML 来强制结束标记:

from lxml.html.clean import Cleaner
import lxml.html as LH
text = '<ul><li></li><li>FooBar</li></ul>'
cleaner = Cleaner()
root = LH.fromstring(cleaner.clean_html(text, ))
print(LH.tostring(root, method='xml'))

产量

<ul><li/><li>FooBar</li></ul>

关于Python - lxml 库 'clean' 方法仅删除空 <li> 节点的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16735516/

相关文章:

python - 为什么要在扩建内部 build 监督员?

ruby-on-rails-3 - Rails 3 提交标签 + html_safe

php - htmlspecialchars 导致文本消失

python - 如何在 Windows 上为多个平台编译 cython 模块?

python - 计算 2D 插值积分时出错。比较 numpy 数组

python - 使用lxml在python中解析html和js

python - lxml.etree.XMLSyntaxError,文档标记为 UTF-16 但具有 UTF-8 内容

python - lxml 在解析时删除 <?xml ...> 标签?

python - 在Python的BeautifulSoup renderContents中,'list'对象没有属性 'items'

python - 我建立了一个 CNN 来检测人脸。从第一个纪元开始,我就获得了更高的准确性。可能是什么原因?