103 votes

Python/BeautifulSoup - comment supprimer toutes les balises d'un élément ?

Comment puis-je retirer simplement toutes les balises d'un élément que je trouve dans BeautifulSoup ?

141voto

shawnl Points 800

Avec BeautifulStoneSoup rentré bs4 En Python3, c'est encore plus simple.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
text = soup.get_text()
print(text)

18voto

Bobby Points 175

Pourquoi aucune réponse que j'ai vue n'a mentionné quoi que ce soit au sujet de la unwrap méthode ? Ou, encore plus facile, la get_text méthode

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unwrap http://www.crummy.com/software/BeautifulSoup/bs4/doc/#get-text

14voto

SparkAndShine Points 7802

Utilisez get_text() elle renvoie tout le texte contenu dans un document ou sous une balise, sous la forme d'une seule chaîne Unicode.

Par exemple, supprimez toutes les différentes balises script du texte suivant :

<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>

Le résultat attendu est :

Signal et Communication
Ingénierie Réseaux et Télécommunications

Voici le code source :

#!/usr/bin/env python3
from bs4 import BeautifulSoup

text = '''
<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>
'''
soup = BeautifulSoup(text)

print(soup.get_text())

9voto

danblack Points 111

Vous pouvez utiliser la méthode de décomposition dans bs4 :

soup = bs4.BeautifulSoup('<body><a href="http://example.com/">I linked to <i>example.com</i></a></body>')

for a in soup.find('a').children:
    if isinstance(a,bs4.element.Tag):
        a.decompose()

print soup

Out: <html><body><a href="http://example.com/">I linked to </a></body></html>

6voto

Shaurya Sheth Points 125

Code pour obtenir simplement le contenu sous forme de texte au lieu de html :

Texte intégral Le paramètre est la chaîne de caractères que vous passerez dans cette fonction pour obtenir le texte.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_text, 'lxml')
text = soup.get_text()
print(text)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X