Убрать HTML-теги - lxml.html.clean.clean_html не работает должным образом - PullRequest
2 голосов
/ 27 января 2012

Я хочу убрать все 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 ]

2 голосов
/ 27 января 2012

В качестве обходного пути вы можете добавить span и div теги к allowed_tags.

UPD

lxml.html.Cleaner пытаетсяпреобразуйте строку в html-дерево, вызвав fromstring , которая проверяет, есть ли в документе какой-либо корневой узел, и добавляет его при необходимости.Поэтому вам нужно разрешить теги span и div

1 голос
/ 27 января 2012

Это похоже на ошибку.Я не вижу его в 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>'
...