recherche

Maison  >  Questions et réponses  >  le corps du texte

Extraire le texte de plusieurs éléments span sans classes - en utilisant BeautifulSoup

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粉903052556P粉903052556481 Il y a quelques jours966

répondre à tous(2)je répondrai

  • P粉041856955

    P粉0418569552023-09-16 15:38:11

    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']

    répondre
    0
  • P粉099145710

    P粉0991457102023-09-16 14:52:27

    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
    

    répondre
    0
  • Annulerrépondre