Disons que j'ai le morceau de HTML suivant:
<html> <body> <p>This is a paragraph <!-- and a comment --></p> </body> </html>
Je veux extraire tout le texte de la balise , y compris . Utiliser .get_text () renvoie uniquement "Ceci est un paragraphe".
Je veux tout le texte brut comme ceci: Ceci est un paragraphe code >.
Comment cela peut-il être réalisé avec beautifulsoup4?
4 Réponses :
Recherchez la balise p et utilisez l'attribut text pour obtenir son texte:
This is a paragraph <!-- and a comment -->
Modifier :
Si vous recherchez également le commentaire à l'intérieur de la balise, vous pouvez utiliser l'importation de comment depuis bs4 :
XXX
Edition 2:
Utilisation du . decode_contents () :
for para_tag, comment in soup.find_all('p'):
print(para_tag.decode_contents())
SORTIE:
s = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""
from bs4 import BeautifulSoup
from bs4 import Comment
soup = BeautifulSoup(s)
for para_tag, comment in zip(soup.find_all('p'), soup.find_all(text=lambda text: isinstance(text, Comment))):
if comment:
print(para_tag.text, "<!--" + comment + "-->")
else:
print(para_tag.text)
@ αԋɱҽԃαмєяιcαη noté et modifié avec le correctif, merci! ^^
Aussi une réponse très utile mais je pense que celle de Pedro Lobito est légèrement plus propre
@DirtyBit J'ai supprimé mon vote défavorable maintenant. vous n'avez pas besoin d'être pressé pour répondre à une question. Lisez attentivement puis postez la réponse :)
Tout d'abord, définissez votre bibliothèque Jsoup et appelez-la où vous le souhaitez, puis utilisez cette méthode pour extraire la balise P de HTML
pgTagExtract = find ('p')
🙂
Utilisez decode_contents () ( doc ), soit:
from bs4 import BeautifulSoup
html = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""
soup = BeautifulSoup(html, "html5lib")
for para_tag in soup.find_all('p'):
print(para_tag.decode_contents())
# This is a paragraph <!-- and a comment -->
p>
Vous pouvez trouver tous les éléments p et parce que vous avez la partie commentaire, vous devez supprimer le p de la chaîne de conversion
html = """
<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>
"""
from bs4 import BeautifulSoup
object = BeautifulSoup(html)
for i in objectin.find_all('p'):
print(str(i).replace('<p>', '').replace('</p>', ''))