Extraire le texte de plusieurs éléments span sans classes - en utilisant BeautifulSoup
P粉903052556
P粉903052556 2023-09-15 18:03:23
0
2
948

Voici à quoi ressemble le HTML :

<p class="details">
<span>detail1</span>
<span class="number">1</span>
<span>detail2</span>
<span>detail3</span>
</p>

Je dois extraire detail2 et detail3.

Mais en utilisant ce code, je ne peux obtenir que des détails1.

info = data.find("p", class_ = "details").span.text

Comment extraire les éléments requis ?

Merci d'avance !

P粉903052556
P粉903052556

répondre à tous(2)
P粉041856955

Dans votre cas, sélectionnez un élément plus spécifique, c'est-à-dire sélectionnez tous les éléments frères d'un élément avec un numéro de classe :

soup.select('span.number ~ span')

Exemple

from bs4 import BeautifulSoup
html='''<p class="details">
<span>detail1</span>
<span class="number">1</span>
<span>detail2</span>
<span>detail3</span>
</p>'''
soup = BeautifulSoup(html)

[t.text for t in soup.select('span.number ~ span')]

Sortie

['detail2', 'detail3']
P粉099145710

Vous pouvez tout trouver <span> et faire une indexation normale :

from bs4 import BeautifulSoup

html_doc = """\
<p class="details">
<span>detail1</span>
<span class="number">1</span>
<span>detail2</span>
<span>detail3</span>
</p>"""

soup = BeautifulSoup(html_doc, "html.parser")

spans = soup.find("p", class_="details").find_all("span")

for s in spans[-2:]:
    print(s.text)

Résultat de sortie :

detail2
detail3

Ou utilisez les sélecteurs CSS :

spans = soup.select(".details span:nth-last-of-type(-n+2)")

for s in spans:
    print(s.text)

Résultat de sortie :

detail2
detail3
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal