Skip to main content
 首页 » 编程设计

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

2025年05月04日9mayingbao

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