Есть ли способ удалить/удалить теги html с помощью lxml.html и не beautifulsoup, у которого есть некоторые проблемы с xss? Я пытался использовать cleaner, но я хочу удалить все html.Удалить все html в python?
ответ
Попробуйте метод .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()
Я хочу избавиться от всего, а не только от небезопасных тегов – Timmy
Если вы хотите избавиться от всего, почему бы не просто 'text = '''? ;-) Серьезно, 'text_content()' БУДЕТ избавиться от всей разметки, но очистка также будет устранена, например. css rulesheet rules и javascript, которые также закодированы как текст * внутри * элемента (но я предположил, что вас интересует только «реальный» текст, следовательно, сначала очистка). – Steven
использовал clean_html (string), который имеет разные значения. – Timmy
Я считаю, что этот код может помочь вам:
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)
После быстрого эксперимента это решение, похоже, выполняет гораздо лучшую работу, чем эта, например http://stackoverflow.com/a/5332984/787842, но я хотел бы узнать больше о том, как правильно параметризовать объект 'Cleaner' (поскольку существует множество опций); например, в этом случае наличие пустого списка 'allow_tags' и' remove_unknown_tags', установленного в 'False', выглядит мне немного странным, логически. – cjauvin
@cjauvin: Конечно, вы правы! Это своего рода хак. Но я уверен, что никто не хочет указывать все теги, необходимые для удаления в аргументе 'remove_tags', если они хотят удалить все из них. К сожалению, в этом случае реализация 'Cleaner' поощряет пользователей использовать' allow_tags' с 'remove_unknown_tags' для этих целей https://github.com/lxml/lxml/blob/54a8bfedcd0f32274a4ebf9e2d8e391fe759aba5/src/lxml/html/clean.py#L387 – dni
Как BeautifulSoup проблемы межсайтовых скриптов? – jball