Supprimer toutes les Balises javascript et les balises style de html avec python et le module lxml
j'analyse un document html en utilisant le http://lxml.de / library. Jusqu'à présent, j'ai compris comment supprimer des balises d'un document html dans lxml, comment supprimer une balise mais conserver tout le contenu? , mais la méthode décrite dans ce post laisse tout le texte, dépouillant les balises avec suppression du script. J'ai aussi trouvé une référence de classe à lxml.HTML.propre.Nettoyeur http://lxml.de/api/lxml.html.clean.Cleaner-class.html mais c'est aussi clair que la façon d'utiliser réellement la classe pour nettoyer le document. Toute aide, peut-être un petit exemple serait utile pour moi!
3 réponses
ci-Dessous est un exemple pour faire ce que vous voulez. Pour un document HTML, Cleaner
est une meilleure solution générale au problème que d'utiliser strip_elements
, parce que dans des cas comme celui-ci, vous voulez rayer plus que juste la balise <script>
; vous voulez aussi vous débarrasser de choses comme onclick=function()
attributs sur d'autres tags.
#!/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')))
Vous pouvez obtenir une liste des options que vous pouvez définir dans la lxml.HTML.propre.Documentation plus propre ; certains les options que vous pouvez simplement définir à True
ou False
(la valeur par défaut) et d'autres prennent une liste comme:
cleaner.kill_tags = ['a', 'h1']
cleaner.remove_tags = ['p']
noter que la différence entre kill vs 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).
vous pouvez utiliser la méthode strip_elements pour supprimer des scripts, puis utiliser strip_tags méthode pour supprimer d'autres tags:
etree.strip_elements(fragment, 'script')
etree.strip_tags(fragment, 'a', 'p') # and other tags that you want to remove
vous pouvez également utiliser bs4 libray à cette fin.
soup = BeautifulSoup(html_src, "lxml")
[x.extract() for x in soup.findAll(['script', 'style'])]