Удалите все теги javascript и теги стилей из html с помощью python и модуля lxml
Я разбираю html-документ, используя http://lxml.de / библиотека. До сих пор я выяснил, как удалить теги из html-документа в lxml, как удалить тег, но сохранить все содержимое? но метод, описанный в этом посте, оставляет весь текст, удаляя теги без удаления самого сценария. Я также нашел ссылку на класс lxml.формат html.чистый.Очиститель http://lxml.de/api/lxml.html.clean.Cleaner-class.html но это ясно, как грязь, о том, как фактически используйте класс для очистки документа. Любая помощь, возможно, короткий пример будет полезен для меня!
3 ответа:
Ниже приведен пример, чтобы сделать то, что вы хотите. Для 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.чистый.Более чистая документация ; некоторые параметры можно просто установить в
True
илиFalse
(по умолчанию), а другие берут список например:cleaner.kill_tags = ['a', 'h1'] cleaner.remove_tags = ['p']
Обратите внимание, что разница между kill и 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