我正在使用 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/