web-dev-qa-db-fra.com

Puis-je supprimer des balises de script avec BeautifulSoup?

Les balises de script et tout leur contenu peuvent-ils être supprimés du HTML avec BeautifulSoup ou dois-je utiliser des expressions régulières ou autre chose?

83
Sam
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> [s.extract() for s in soup('script')]
>>> soup
baba
141
Fábio Diniz

Réponse mise à jour pour ceux qui pourraient avoir besoin d'une référence future: La réponse correcte est. decompose() Vous pouvez utiliser différentes méthodes, mais decompose fonctionne sur place.

Exemple d'utilisation:

soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>')
soup.i.decompose()
print str(soup)
#prints '<p>This is a slimy text and</p>'

Très utile pour se débarrasser des détritus tels que 'script', 'img' etc.

23
Abhishek Dujari

Comme indiqué dans la ( documentation officielle ), vous pouvez utiliser la méthode extract pour supprimer tous les sous-arbres correspondant à la recherche.

import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]
21