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 decomposefonctionne 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.
decomposeet extractest 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.
                    removecontenu. Souvent utilisé pour nettoyer le HTML des balises et du formatage inutiles.
                    Comme indiqué dans la ( documentation officielle ), vous pouvez utiliser la extractmé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')]