2012-01-27 140 views
2

我想從字符串中除去某些指定的html標籤。 如果我打電話用默認值都構造正常工作:Strip html標籤 - lxml.html.clean.clean_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

作爲一種解決方法,您可以將spandiv標記添加到allowed_tags

UPD

lxml.html.Cleanertries to convert字符串通過調用fromstring,檢查文件是否有一定的根節點,並在必要時將其添加到html樹。所以你需要允許span and div tags

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>' 
相關問題