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 Réponses :
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
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]))
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',''))
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)
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