0
votes

Python BeautifulSoup - récupère les valeurs de p

html = '<p class="product-new-price">96<sup>33</sup> <span class="tether-target tether-enabled tether-element-attached-top tether-element-attached-left tether-target-attached-top tether-target-attached-right">Lei</span>
</p>'

soup = BeautifulSoup(html, 'html.parser')

sup_elem = soup.find("sup").string # 33 - it works
How do I get the "96" before the  element ?

3 commentaires

Double possible de Extraire le contenu d'une balise avec BeautifulSoup


voulez-vous étendre le texte entier dans la balise p ou le texte directement sous la balise 9? Qu'en est-il du texte «Lei» dans une chaîne donnée?


Sur tous les html qui m'intéressent seulement 96,33


3 Réponses :


1
votes

Vous pouvez utiliser la méthode des enfants. Il renverra une liste de tous les enfants de la balise p. (6 en sera le premier enfant.

html = '<p class="product-new-price">96<sup>33</sup> <span class="tether-target tether-enabled tether-element-attached-top tether-element-attached-left tether-target-attached-top tether-target-attached-right">Lei</span>
</p>'

soup = BeautifulSoup(html, 'html.parser')

elem = list(soup.find("p").children)[0] #0th element of the list will be 96
sup_elem = soup.find("sup").string

result = elem + '.' + sup_elem #96.33


0 commentaires

1
votes

Vous pouvez récupérer la balise précédenteSibling

96.33

Sortie:

from bs4 import BeautifulSoup

html = '''<p class="product-new-price">96<sup>33</sup> <span class="tether-target tether-enabled tether-element-attached-top tether-element-attached-left tether-target-attached-top tether-target-attached-right">Lei</span>
</p>'''

soup = BeautifulSoup(html, 'html.parser')

elem1 = soup.find("sup").previousSibling
elem2 = soup.find("sup").text # 33 - it works

print ('.'.join([elem1, elem2]))


0 commentaires

1
votes

Utilisez select à la place.

print(int(soup.select_one('.product-new-price').text.strip().replace('Lei',''))/100)

Il n'y a pas de "." dans la source mais vous pouvez toujours diviser par 100

from bs4 import BeautifulSoup

html = '''<p class="product-new-price">96<sup>33</sup> <span class="tether-target tether-enabled tether-element-attached-top tether-element-attached-left tether-target-attached-top tether-target-attached-right">Lei</span>
</p>'''

soup = BeautifulSoup(html, 'html.parser')
print(soup.select_one('.product-new-price').text.strip().replace('Lei',''))


3 commentaires

votre sortie est 9633 et elle devrait être 96,33


il n'y a pas "." dans la source.


Si vous en voulez un, faites simplement print (int (soup.select_one ('. Product-new-price'). Text.strip () ‌ .replace ('Lei', '')) / ‌ 100)