7
votes

Remplacer
par de l'espace dans la sortie BeautifulSoup

Je racle quelques liens avec BeautifulSoap cependant, il semble ignorer complètement les balises
.

Voici la partie pertinente du code source de l'URL que je supprime: p>

    A quick brown fox jumps over the lazy dog

Voici mon code BeautifulSoap (partie pertinente uniquement) pour obtenir le texte dans les balises h1 :

    A quick brown fox jumps overthe lazy dog

Cela donne le résultat suivant:

    soup = BeautifulSoup(page, 'html.parser')
    title_box = soup.find('h1', attrs={'class': 'para-title'})
    title = title_box.text.strip()
    print title

Alors que j'attends:

<h1 class="para-title">A quick brown fox jumps over<br>the lazy dog
<span id="something">&#xe800;</span></h1>

Comment puis-je remplacer le
avec un espace dans mon code?


2 commentaires

L'extrait ci-dessus donne la sortie Un renard brun rapide saute par-dessus le chien paresseux quelques trucs ici comme il se doit.


Ouais mon mauvais comme span ne contient aucun texte. J'ai édité la question.


3 Réponses :


11
votes

Pourquoi ne pas utiliser .get_text () avec le paramètre de séparation?

print (title)
A quick brown fox jumps over the lazy dog
 some stuff here

Sortie:

from bs4 import BeautifulSoup

page = '''<h1 class="para-title">A quick brown fox jumps over<br>the lazy dog
<span>some stuff here</span></h1>'''


soup = BeautifulSoup(page, 'html.parser')
title_box = soup.find('h1', attrs={'class': 'para-title'})
title = title_box.get_text(separator=" ").strip()
print (title)   


1 commentaires

Mes excuses car les balises span ne contiennent aucun texte (question modifiée), donc cela a très bien fonctionné pour moi. Merci.



0
votes

Utilisez la fonction str.replace :
print title.replace ("
", "")


1 commentaires

L'utilisation de replace ("
", "")
sur title ne fonctionnera pas. Vous devrez l'utiliser sur le HTML brut, avant de le transmettre à BeautifulSoup.



2
votes

Utilisation de replace () sur le html avant l'analyse:

Planet Nine was initially proposed to explain the clustering of orbits. Of Planet Nine's other effects, one was unexpected, the perpendicular orbits, and the other two were found after further analysis. Although other mechanisms have been offered for many of these peculiarities, the gravitational influence of Planet Nine is the only one that explains all four..

OUTPUT :

html = '''<div class="description">Planet Nine was initially proposed to explain the clustering of orbits
Of Planet Nine's other effects, one was unexpected, the perpendicular orbits, and the other two were found after further analysis. Although other mechanisms have been offered for many of these peculiarities, the gravitational influence of Planet Nine is the only one that explains all four.
</div>'''

from bs4 import BeautifulSoup

html = html.replace("\n", ". ")
soup = BeautifulSoup(html, 'html.parser')
div_box = soup.find('div', attrs={'class': 'description'})
divText= div_box.get_text().strip()
print (divText)


7 commentaires

Dans une partie différente de mon code, j'ai des sauts de ligne dans le texte (pas de br, juste des sauts de ligne) que je saisis. Comment puis-je remplacer le saut de ligne par un point et un espace?


@ mumer91 Pourriez-vous en publier un échantillon, s'il vous plaît?


Voici un exemple HTML et mon code: pastebin.com/Q8AnKvJy P.S. Je ne peux poster qu'une seule question toutes les 90 minutes, donc en utilisant pastebin. ;)


Merci mais j'obtiens une erreur TypeError: l'objet 'NoneType' n'est pas appelable.


@ mumer91 avez-vous copié-collé le code que j'ai publié? Il est testé et fonctionne très bien. Sur quelle ligne obtenez-vous l'erreur?


J'ai probablement foiré la question. Pouvez-vous jeter un oeil ici pour plus de détails? stackoverflow.com/ questions / 55592384 /…


@ mumer91 a également publié une solution, voyez si cela aide?