Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraire données d' une partie de page web

Python

Sujet résolu
    11 août 2024 à 18:53:51

    Bonsoir,

    J' ai réussi à extraire 99% des données que je voulais récupérer dans une page Web. Toutefois, je butte sur le dernier poste.

    Dans cette partie de la page j' otiens facilement la datedu consensus.

    Dans le consensus, figure le conseil achat, vente etc... Au dessus du conseil(dans l' exemple joint) figure un chiffre correspondant aux votes exprimés.

    Le but est donc d ' obtenir:

    Renforcer et 2.30.

    La partie de la page HTLM:

    <div class="c-median-gauge"><div class="c-median-gauge__step c-median-gauge__step--color-1"><div class="c-median-gauge__bar c-median-gauge__bar--has-left-radius"></div><p class="c-median-gauge__text u-text-size-xxs"><span class="c-median-gauge__number">1.</span>
                        Acheter
                                </p></div><div class="c-median-gauge__step c-median-gauge__step--color-2"><div class="c-median-gauge__tooltip ">
                                2,30
                            </div><div class="c-median-gauge__bar"></div><p class="c-median-gauge__text u-text-size-xxs"><span class="c-median-gauge__number">2.</span>
                        Renforcer
                                </p></div><div class="c-median-gauge__step c-median-gauge__step--color-3"><div class="c-median-gauge__bar"></div><p class="c-median-gauge__text u-text-size-xxs"><span class="c-median-gauge__number">3.</span>
                        Conserver
                                </p></div><div class="c-median-gauge__step c-median-gauge__step--color-4"><div class="c-median-gauge__bar"></div><p class="c-median-gauge__text u-text-size-xxs"><span class="c-median-gauge__number">4.</span>
                        Alléger
                                </p></div><div class="c-median-gauge__step c-median-gauge__step--color-5"><div class="c-median-gauge__bar c-median-gauge__bar--has-right-radius"></div><p class="c-median-gauge__text u-text-size-xxs"><span class="c-median-gauge__number">5.</span>
                        Vendre
                                </p></div></div>

    Ci joint, le bout de programme python:

    #!/usr/bin/env python 3
    
    import requests
    from bs4 import BeautifulSoup as bs
    
    # Capture de la page web
    url = 'https://www.boursorama.com/cours/1rPICAD/'
    rqt = requests.get(url)
    html = rqt.content
    soup = bs(html, "lxml")
    #Récupération de la date
    x = soup.find_all('span',{'class':'c-heading__text / o-flag__body'})[8].text.strip()
    dateConsensus=x[len(x)-9:len(x)-1]
    print (dateConsensus)
    #Récupération des types de conseils
    for test in soup.find_all('span',{'class':'c-median-gauge__number'}):
        print(test.string.strip())
    #Nombre de votes obtenus    
    for y in soup.find_all('div',{'class':'c-median-gauge__tooltip'}):
        cote = y.string.strip()
        if len(cote)<5:
            print(cote)

    Le résultat ne me conviens pas car j' obtiens la liste des consensus possibles et en dernier, la cote obtenu mais sans possibilité de la relier à un conseil.

    Avez-vous une idée pourcontourner ce problème?

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2024 à 12:37:40

      Salut, 

      Voilà ma proposition en sachant qu'elle peut surement être optimisée :

      import requests
      from bs4 import BeautifulSoup as bs
      
      # Capture de la page web
      url = 'https://www.boursorama.com/cours/1rPICAD/'
      rqt = requests.get(url)
      html = rqt.content
      soup = bs(html, "lxml")
      gauges = soup.find_all('div',{"class":"c-median-gauge"})
      gauge = gauges[1].find_all('div', {'class':'c-median-gauge__step'})
      
      for elt in gauge:
          if tooltip := elt.find('div', {'class':'c-median-gauge__tooltip'}):
              print(tooltip.text.strip())
              gauge_text = elt.find('p',{'class':'c-median-gauge__text'})
              print(gauge_text.text.strip().split())

      -
      Edité par Garkam 12 août 2024 à 12:39:31

      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2024 à 18:47:32

        Bonsoir

        Merci de votre aide. Je fais un test et vous donnerez le résultat. Par contre, je ne pourrais le faire que demin soir, mais vous aurez le résultat.

        Encore merci

        Bien cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2024 à 19:10:53

          Bonsoir,

          Votre programme fonctionne parfaitement. C' est bien les informations recherchées qui s' affichent.

          Le passage parGAUGES et GAUGEpermet d' isolé le paragraphe concerné.

          Si vous avez un peu de temps, qu' apporte l' opérateur:= dans la ligne 13. J' ai recherché dans la documentation mais je n" ai pas su trouver la réponse?

          S' agit'il de la commande qui permet de sélectionnée la cote correspondan t au conseil?

          Encore merci, Le r"sultat est la!!

          Cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2024 à 20:11:58

            Salut,

            L'opérateur walrus ou morse (:=) permet d'assigner une variable dans une condition, il a été introduit avec Python 3.8.

            Il simplifie ceci :

            for elt in gauge:
                tooltip = elt.find('div', {'class':'c-median-gauge__tooltip'}):
                    if tooltip:
                        print(tooltip.text.strip())
                        gauge_text = elt.find('p',{'class':'c-median-gauge__text'})
                        print(gauge_text.text.strip().split())



            • Partager sur Facebook
            • Partager sur Twitter

            Extraire données d' une partie de page web

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown