Я анализирую html-документ, используя библиотеку http://lxml.de/. До сих пор я выяснил, как вырезать теги из html-документа In lxml, how do I remove a tag but retain all contents?, но метод, описанный в этом сообщении, оставляет весь текст, удаляя теги с удалением фактического скрипта. Я также нашел ссылку на класс для lxml.html.clean.Cleaner http://lxml.de/api/lxml.html.clean.Cleaner-class.html, но это ясно, как грязь о том, как на самом деле использовать класс для очистки документа. Любая помощь, возможно, короткий пример будет полезен для меня!Удалить все теги javascript и теги стиля из html с помощью python и модуля lxml
ответ
Ниже приведен пример, чтобы сделать то, что вы хотите. Для HTML-документа Cleaner
- лучшее общее решение проблемы, чем использование strip_elements
, потому что в подобных случаях вы хотите вырезать больше, чем только тег <script>
; вы также хотите избавиться от таких вещей, как onclick=function()
атрибутов по другим тегам.
#!/usr/bin/env python
import lxml
from lxml.html.clean import Cleaner
cleaner = Cleaner()
cleaner.javascript = True # This is True because we want to activate the javascript filter
cleaner.style = True # This is True because we want to activate the styles & stylesheet filter
print "WITH JAVASCRIPT & STYLES"
print lxml.html.tostring(lxml.html.parse('http://www.google.com'))
print "WITHOUT JAVASCRIPT & STYLES"
print lxml.html.tostring(cleaner.clean_html(lxml.html.parse('http://www.google.com')))
Вы можете получить список опций, которые можно установить в lxml.html.clean.Cleaner documentation; некоторые опции, которые вы можете просто установить в True
или False
(по умолчанию) и другие взять список, как:
cleaner.kill_tags = ['a', 'h1']
cleaner.remove_tags = ['p']
Обратите внимание, что разница между убить против REMOVE:
remove_tags:
A list of tags to remove. Only the tags will be removed, their content will get pulled up into the parent tag.
kill_tags:
A list of tags to kill. Killing also removes the tag's content, i.e. the whole subtree, not just the tag itself.
allow_tags:
A list of tags to include (default include all).
Вы можете использовать метод strip_elements для удаления скриптов, а затем использовать strip_tags метод для удаления других меток:
etree.strip_elements(fragment, 'script')
etree.strip_tags(fragment, 'a', 'p') # and other tags that you want to remove
Для HTML-документа при удалении скриптов, которые вы хотите, чтобы избавиться от ВСЕХ JavaScript, а не только ''
Отлично, спасибо! –
Я пробыл большую часть дня, должен был довести это раньше, я думаю. Я просто заметил после игры, что вещь kill_tags, похоже, ничего не делает, например, я добавил 'cleaner.kill_tags = ('img', 'noscript', 'a')', но эти теги остаются в выходном документе , остальная часть приведенного выше примера работает так, как ожидалось, сразу после игры с тегами kill, которые я заметил это. –
Извещение в моем примере Я использую квадратные скобки, а не круглые скобки. Вы должны попробовать '['img', 'noscript', 'a']'. Квадратные скобки обозначают список, тогда как круглые скобки обозначают кортеж (в вашем примере 3-элементный кортеж). Кортежи и списки не совпадают. – aculich