IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

BeautifulSoup - find_all() [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut BeautifulSoup - find_all()
    Bonjour,
    Je bloque pour extraire certaines données de la page HTML ci-dessous :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html>
    <html>
      <head>
        <title>Exercice extraction HTML</title>
      </head>
      <body>
        <h1>Bienvenue sur notre site web</h1>
        <p>Voici une liste de nos produits :</p>
        <ul>
          <li>
            <h2>Produit 1</h2>
            <p>Prix : 10€</p>
            <p>Description : Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
          </li>
          <li>
            <h2>Produit 2</h2>
            <p>Prix : 20€</p>
            <p>Description : Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
          </li>
          <li>
            <h2>Produit 3</h2>
            <p>Prix : 30€</p>
            <p>Description : Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
          </li>
        </ul>
      </body>
    </html>

    Comment faire pour extraire seulement les prix ? soit les balises <p> à l'intérieur des balises <ul>.
    Ça doit être tout bête mais je bloque malgré mes recherches.
    J'ai essayé de rentrer différents critères avec soup.find_all('p', attrs={"class": "class_name", "id": "id_name"}) mais impossible.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Par filtres successifs. Par exemple en récupérant ce que retourne soup.find_all('p') dont le contenu commence par 'Prix : '.
    En une seule ligne, il faut passer une regexp: soup.find_all('p', string=re.compile('Prix :'))

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2023
    Messages : 4
    Par défaut
    Super, ça fonctionne !
    merci

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par abraxas12 Voir le message
    Comment faire pour extraire seulement les prix ? soit les balises <p> à l'intérieur des balises <ul>.
    Question pas claire ! (puisqu'il y a plusieurs balises p)
    - on peut ne sélectionner que la première balise P
    - ou, sélectionner en fonction du contenu

    find_all , ce que j'en pense ...
    Clairement, je préfère select() et on peut facilement l'utiliser suivant les 2 critères qui sont complètement différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for prix in soup.select('ul li > p:nth-of-type(1)'):
        print(prix)
    # balises li qui contiennent impérativement un H2 (tordu, mais parfois...)
    for prix in soup.select('ul li:has(> h2)  p:nth-of-type(1)'):
        print(prix)
    # ou , uniquement un p précédé d'un H2
    for prix in soup.select('ul li h2 + p'):
        print(prix)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for prix in soup.select('ul li > p:-soup-contains("Prix")'):
        print(prix)
    # ul li:has(> h2)  p:-soup-contains("Prix") # est aussi valide
     
    # "-soup-contains()" presque équivalent à :
    for prix in soup.select('ul li > p'):
        if str(prix.string).startswith("Prix"):
            print(prix)
    Pour les pseudo classes (et sélecteurs), voir la doc de la lib de BeautifulSoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. BeautifulSoup - Recherche de données dans une page web
    Par Okidor12 dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 24/07/2012, 10h36
  2. BeautifulSoup + urllib2(3?) + threading ou twisted ?!
    Par Carto_ dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 26/04/2012, 04h15
  3. Réponses: 7
    Dernier message: 24/04/2012, 17h58
  4. BeautifulSoup et HTML ma formé
    Par hopla7280 dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 27/02/2009, 15h22
  5. besoin aide - parser HTML - BeautifulSoup
    Par romses2 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 20/07/2007, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo