1
votes

Comment extraire du texte brut (y compris les commentaires) d'une page HTML avec BeautifulSoup Python?

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?


0 commentaires

4 Réponses :


1
votes

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)


3 commentaires

@ αԋɱҽԃαмєяι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 :)



-2
votes

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')

🙂


0 commentaires

1
votes

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>


0 commentaires

0
votes

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>', ''))


0 commentaires