Maison > Questions et réponses > le corps du texte
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粉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')
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')]
['detail2', 'detail3']
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