web-dev-qa-db-fra.com

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

Comment puis-je simplement supprimer toutes les balises d'un élément trouvé dans BeautifulSoup?

55
Daniele B

Avec BeautifulStoneSoup entré dans bs4, c'est encore plus simple en Python3

from bs4 import BeautifulSoup

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

pourquoi aucune réponse que j'ai vue ne mentionne quoi que ce soit à propos de la méthode unwrap? Ou, encore plus facilement, le get_text méthode

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

13
Bobby

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

Par exemple, supprimez toutes les balises de script différentes 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())
7
SparkAndShine

Vous pouvez utiliser la méthode decompose 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>
5
danblack

En supposant que vous vouliez enlever les balises, mais conserver le contenu, voir la réponse acceptée à cette question: Supprimez une balise en utilisant BeautifulSoup mais conservez son conten

2
Shaun

on dirait que c'est la façon de faire! aussi simple que cela

avec cette ligne, vous joignez ensemble toutes les parties de texte de l'élément en cours

''.join(htmlelement.find(text=True))
1
Daniele B