如何使用清洁剂,lxml.html不返回div tag?

2024-03-29 11:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个代码:

evil = "<script>malignus script</script><b>bold text</b><i>italic text</i>"
cleaner = Cleaner(remove_unknown_tags=False, allow_tags=['p', 'br', 'b'],
                  page_structure=True)
print cleaner.clean_html(evil)

我希望得到这个:

^{pr2}$

但我得到的却是:

<div><b>bold text</b>italic text</div>

是否有属性可以删除div标记包装?在


Tags: 代码textdivfalsetagsscriptremoveunknown
2条回答

lxml希望html具有树结构,即单个根节点。如果没有,它会添加它。在

Cleaner总是将结果包装在一个元素中。一个好的解决方案是手动解析HTML并将生成的document对象发送到cleaner—那么结果也是一个document对象,您可以使用text_content从根中提取文本。在

from lxml.html import document_fromstring
from lxml.html.clean import Cleaner
evil = "<script>malignus script</script><b>bold text</b><i>italic 
text</i>"
doc = document_fromstring(evil)
cleaner = Cleaner(remove_unknown_tags=False, allow_tags=['p', 'br', 'b'],
              page_structure=True)
print cleaner.clean_html(doc).text_content()

这也可以作为one liner完成

相关问题 更多 >