Comment puis-je simplement supprimer toutes les balises d'un élément trouvé dans BeautifulSoup?
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)
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
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())
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>
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
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))