Disons que j'ai le morceau de HTML suivant:

<html>
<body>
<p>This is a paragraph <!-- and a comment --></p>
</body>
</html>

Je souhaite extraire tout le texte de la balise <p>, y compris <!-- and a comment -->. L'utilisation de .get_text () renvoie uniquement "Ceci est un paragraphe".

Je veux le texte brut entier comme ceci: This is a paragraph <!-- and a comment -->.

Comment cela peut-il être réalisé avec beautifulsoup4?

1
user3217163 24 avril 2020 à 21:42

4 réponses

Meilleure réponse

Utilisez decode_contents() (doc), c'est-à-dire:

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 -->
2
CONvid19 24 avril 2020 à 19:02

Vous pouvez trouver tous les éléments p, puis parce que vous avez la partie commentaire, vous devez supprimer le p de la chaîne de transtypage

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
Leo Arad 24 avril 2020 à 19:01

Recherchez la balise p et utilisez l'attribut text pour obtenir son texte:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)

for para_tag in soup.find_all('p'):
    print(para_tag.text)

Modifier :

Si vous recherchez également le commentaire dans la balise, vous pouvez utiliser l'importation comment à partir de bs4:

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)

Modifier 2:

Utilisation de .decode_contents ():

for para_tag, comment in soup.find_all('p'):
       print(para_tag.decode_contents())

SORTIE:

This is a paragraph <!-- and a comment -->
2
DirtyBit 24 avril 2020 à 19:02

Définissez d'abord votre Jsoup bibliothèque et appelez-la où vous voulez, puis utilisez cette méthode pour extraire la balise P de HTML

pgTagExtract = find('p')

🙂

-2
RTH Creating Studio 24 avril 2020 à 18:51