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?
Réponses:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>> s.extract()
>>> soup
baba
[s.extract() for s in soup(['iframe', 'script'])]
Notez que pour utiliser plusieurs balises, le paramètre doit être une liste
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
? Est-ce la même?
<html><head></head><body><p>baba</p></body></html>
Réponse mise à jour pour ceux qui pourraient avoir besoin d'une référence future: La bonne réponse est.
decompose()
Vous pouvez utiliser différentes méthodes mais decompose
fonctionne en 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 comme «script», «img», etc.
decompose
et extract
est que ce dernier renvoie la chose qui a été supprimée, tandis que le premier la détruit simplement. C'est donc la réponse la plus précise à la question, mais les autres méthodes fonctionnent.
remove
contenu. Souvent utilisé pour nettoyer le HTML des balises et du formatage inutiles.
Comme indiqué dans la ( documentation officielle ), vous pouvez utiliser la extract
méthode pour supprimer tous les sous-arbres qui correspondent à la recherche.
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]