Удалить все HTML в Python? - PullRequest
       45

Удалить все HTML в Python?

1 голос
/ 20 октября 2010

Есть ли способ удалить / экранировать теги html, используя lxml.html, а не beautifulsoup, у которого есть некоторые проблемы с xss? Я пытался использовать очиститель, но я хочу удалить все HTML.

Ответы [ 3 ]

11 голосов
/ 22 марта 2013

Я считаю, что этот код может помочь вам:

from lxml.html.clean import Cleaner

html_text = "<html><head><title>Hello</title><body>Text</body></html>"
cleaner = Cleaner(allow_tags=[''], remove_unknown_tags=False)
cleaned_text = cleaner.clean_html(html_text)
10 голосов
/ 20 октября 2010

Попробуйте метод .text_content() для элемента, вероятно, лучше всего после использования lxml.html.clean, чтобы избавиться от нежелательного содержимого (теги сценария и т. Д.).Например:

from lxml import html
from lxml.html.clean import clean_html

tree = html.parse('http://www.example.com')
tree = clean_html(tree)

text = tree.getroot().text_content()
0 голосов
/ 16 января 2019

При этом используются функции очистки lxml, но предотвращается оборачивание результата в элемент HTML.

import lxml

doc = lxml.html.document_fromstring(str) 
cleaner = lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False)
str = cleaner.clean_html(doc).text_content() 

или в виде одного элемента

lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False).clean_html(lxml.html.document_fromstring(str)).text_content()

Работает путем анализа html.вручную в объект документа, и передать его классу уборщика.Таким образом, clean_html также возвращает объект, а не строку.Затем текст можно восстановить без элемента-оболочки, используя метод text_content ().

...