剥离html标记 - lxml.html.clean.clean_html无法按预期工作

时间:2012-01-27 15:00:41

标签: python lxml

我想从字符串中删除所有html标记,除了我指定的一些。 如果我使用默认值调用构造函数,一切正常:

>>> cleaner = lxml.html.clean.Cleaner()
>>> cleaner.clean_html('''<i>italic</i><script>alert('');</script>''')
'<span><i>italic</i></span>'

但是当我尝试指定一些标签时,事情就不再起作用了:

>>> allowed_tags = ['i','s']
>>> cleaner = lxml.html.clean.Cleaner(remove_unknown_tags=False,allow_tags=allowed_tags)
>>> cleaner.clean_html('''<i>italic</i><s>strike</s>''')
'<span></span>'

那么我做错了什么?

2 个答案:

答案 0 :(得分:2)

要解决此问题,您可以将spandiv代码添加到allowed_tags

<强> UPD

lxml.html.Cleaner tries to convert字符串到html树通过调用fromstring来检查文档是否有某个根节点,并在必要时添加它。所以你需要允许span and div tags

答案 1 :(得分:1)

这似乎是一个错误。我在lxml==2.3.3版本中没有看到它:

>>> from lxml.html import clean
>>> clean.clean_html('''<i>italic</i><script>alert('');</script>''')
'<span><i>italic</i></span>'
>>> c = clean.Cleaner(allow_tags='is', remove_unknown_tags=False)
>>> c.clean_html('''<i>italic</i><s>strike</s>''')
'<div><i>italic</i><s>strike</s></div>'