2

我正在使用 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 库的错误吗?难道我做错了什么?

任何见解将不胜感激。谢谢 !

4

1 回答 1

1

HTML 中的结束标记<li>是可选的,因此它不是错误,尽管它可能不是您想要的行为。

您可以通过将其打印为 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>
于 2013-05-24T13:28:34.497 回答