Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cours bourse Boursorama

Sujet résolu
    19 novembre 2020 à 13:34:53

    Bonjour,

    Après avoir suivi les cours sur python, je souhaiterai pour le fun, créer un programme de récupération de certains cours de bourse sur Boursorama. J' ai bien ouvert la page du code source d' un titre, mais je ne vois pas comment aller chercher les informations.

    La date serait la date du jour.

    Cours le plus bas

    Cours le plus haut,

    Cours à la fermeture

    Écart par rapport à la veille

    Volume traité.

    Pour ce qui est de les enregistrer dans un fichier.csv ou .txt, pas de soucis.

    Avez-vous des pistes?

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2020 à 14:37:17

      une solution serait de passer par du webscrapping (récupérer les données via les balises html de la page); celles qui t'intéresseraient seraient les balises de classe c-faceplate__data et ses descendants ou plus directement la classe c-list-info__item
      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2020 à 17:29:36

        Bonsoir,

        Merci de la rapidité de votre réponse. Je vais tenter de récupérer les données suivant vos conseils.

        Je vous tiens au courant de l' avancement

        Cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2020 à 18:49:02

          Bonsoir,

          J' ai épluché la page HTML du site de Boursorama. Effectivement, en utilisant la classe c-list-info__item, on retrouve les différentes données d' un titre. Il me semble intéressant d" utiliser les bibliothèques Beutiful et Request.

          Par ailleurs, j' ai vu que l'on pouvait également utiliser urllib3 et urlopen. 

          Par contre, je ne suis pas sûr de comprendre comment pointer sur une ligne précise de la page HTML.

          Continuons la recherche.

          Cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2020 à 18:44:25

            Bonsoir,

            Toujours sur mon essai d' extraction de données d' une page web, je bute sur la syntaxe. Mea culpa, débutant en python, j' ai été sûrement un peu présomptueux de me lancer dans ce projet.

            Grace au différends tutos, j' ai retrouvé dans la page web une des données que je cherche à extraire. Voici un exemple du fichier htlm.

            <p class="c-list-info__value u-color-big-stone"><span class="c-instrument c-instrument--previousclose" data-ist-previousclose="">43.420</span></p>

            En utilisant bs4 et BeautifulSoup4, j' a essayé d' extraire cette donnée par la commande ci-dessous:

            print (soup.find('<p',{'class =' 'c-list-info__value' 'class=' "c-instrument c-instrument--previousclose"  data-ist-previousclose="" </span></p>}))

            La syntaxe est incorrecte mais je n' ai pas trouvé de doc pour résoudre ce problème. Pourtant, les exemples ne manquent pas mais pas aussi profondément que dans ce cas.

            Pourriez-vous me conseiller?

            Cordialement




            • Partager sur Facebook
            • Partager sur Twitter
              30 novembre 2020 à 11:52:08

              avec 
              soup.select(".c-instrument--previousclose")[0].text
              #ou
              soup.find("span",class_="c-instrument--previousclose").text
              on récupère le texte de la valeur
              • Partager sur Facebook
              • Partager sur Twitter
                30 novembre 2020 à 17:48:37

                Bonsoir,

                Merci beaucoup de votre aide. J' ai pus avancer dans ce projet. Toutefois j' ai encore des erreurs. Je viens de trouver une documentation plus complète sur BeautfulSoup4. Bon elle est en anglais mais je vais tenter de la traduire pour aller plus loin.

                Bonne soirée

                • Partager sur Facebook
                • Partager sur Twitter
                  26 février 2021 à 20:56:20

                  Bonsoir,

                  Grace à l' aide de umfred, je peux récupérer les cours. Toutefois, cela n' est pas totalement satisfaisant. En effet, les données importées avec ".c-instrument" sont des données arrondies. Par contre, "data-faceplate" permet de ramener les données exactes de la page. Pour une bonne compréhension de ma recherche, je joins ci-dessous la partie de la page à extraire:

                  <header class="l-quotepage__header">
                              <div class="c-faceplate is-positive /*debug*/"
                               data-faceplate
                               data-faceplate-symbol="1rPAF"
                  
                               data-ist="1rPAF" data-ist-init="{&quot;symbol&quot;:&quot;1rPAF&quot;,&quot;high&quot;:5.728,&quot;low&quot;:5.29,&quot;previousClose&quot;:5.51

                  J' ai bati une ligne decommande qui ne me ramène rien. J' ai beau rechercher des solutions, je patine!!!!

                  print (soup.select('.data-faceplate-high'))

                  Pourriez-vous m' aider?

                  Cordialement


                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 février 2021 à 21:59:26

                    S'il y a un point devant c'est que c'est un selecteur de classe, mais 'data-faceplate-high', je le vois pas dans class.

                    En utilisant un autre attribut, tu peux essayer un truc comme ça :

                    soup.find("div", data-faceplate=True)

                    En espérant que ce sélecteur soit unique dans la page.

                    -
                    Edité par LoupSolitaire 26 février 2021 à 22:01:36

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Blond, bouclé, toujours le sourire aux lèvres...

                      27 février 2021 à 18:21:39

                      Bonsoir

                      J' ai testé votre ligne de code. En retour, j' ai le message ci-dessous:

                      name 'data' is not defined

                      En fait, si je reprend l' exemple du fichier html, c-faceplate est bien déclaré comme une classe.

                      high&quot;:5.728

                      en gras la valeur que je cherche à récupérer.

                      J' ai voulu tester la ligne de code ci-dessous mais en retour, j' obtiens none. Es-ce dû au fait que ma ligne est incompréhensible?

                      print(soup.find('div','c-faceplate --high'))
                      

                      Merci de votre retour d' information


                      -
                      Edité par El_Catala 27 février 2021 à 18:28:54

                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 février 2021 à 19:38:52

                        El_Catala a écrit:

                        Bonsoir

                        J' ai testé votre ligne de code. En retour, j' ai le message ci-dessous:

                        name 'data' is not defined

                        Ah oui, c'est à cause du tiret qui est interprété comme un signe moins en Python. J'avais pas pensé à ça.

                        El_Catala a écrit:

                        Bonsoir

                        En fait, si je reprend l' exemple du fichier html, c-faceplate est bien déclaré comme une classe.

                        high&quot;:5.728

                        en gras la valeur que je cherche à récupérer.

                        J' ai voulu tester la ligne de code ci-dessous mais en retour, j' obtiens none. Es-ce dû au fait que ma ligne est incompréhensible?

                        print(soup.find('div','c-faceplate --high'))

                        Pourquoi tu ajoutes --high ? Ça donne quoi si tu fais ça :

                        print(soup.find('div','c-faceplate'))



                        -
                        Edité par LoupSolitaire 27 février 2021 à 19:39:37

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Blond, bouclé, toujours le sourire aux lèvres...

                          27 février 2021 à 19:55:26

                          Bonsoir,

                          Cela me donne la même réponse: none

                          Je rajoute high parce que je cherche à extraire la valeur contenu dans cette !! balise!! si on peut parler de balise. Au même titre que l' on peut tenter d' extraire la valeur de low, previous etc..

                          bonne soirée

                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 février 2021 à 3:40:44

                            Tu peux pas récupérer la valeur de "high" directement avec beautifulsoup. Il faut d'abord récupérer le contenu de 'data-ist-init'. Cet attribut contient du JSON donc ce sera facile à lire avec le module json.

                            Lis un peu de doc sur le HTML, ça te servira parce que là j'ai l'impression que tu ne fais pas la différence entre le code HTML et son contenu.

                            Après j'ai réussi à faire marcher ça chez moi en corrigeant ton bout de HTML parce qu'il est pas correct (manque guillemets, crochets et balises fermantes) :

                            >>> html = '''<header class="l-quotepage__header">                                                                                           
                             <div class="c-faceplate is-positive"
                            ...        data-faceplate
                            ...        data-faceplate-symbol="1rPAF"
                            ...        data-ist="1rPAF" data-ist-init="{&amp;quot;symbol&amp;quot;:&amp;quot;1rPAF&amp;quot;,&amp;quot;high&amp;quot;:5.728,&amp;quot;low&amp;quot;:5.29,&amp;quot;previousClose&amp;quot;:5.51}">
                            ...   </div>
                            ... </header>
                            ... '''
                            >>> soup = bs4.BeautifulSoup(html, 'html.parser')
                            >>> soup.find("div", 'c-faceplate')
                            <div class="c-faceplate is-positive" data-faceplate="" data-faceplate-symbol="1rPAF" data-ist="1rPAF" data-ist-init="{&amp;quot;symbol&amp;quot;:&amp;quot;1rPAF&amp;quot;,&amp;quot;high&amp;quot;:5.728,&amp;quot;low&amp;quot;:5.29,&amp;quot;previousClose&amp;quot;:5.51}">
                            </div>
                            



                            -
                            Edité par LoupSolitaire 28 février 2021 à 3:42:17

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Blond, bouclé, toujours le sourire aux lèvres...

                              28 février 2021 à 13:52:27

                              Bonjour,

                              Je vais suivre votre conseil et me pencher sur Html avant de poursuivre ma recherche.

                              Merci de vos conseils et à une autre fois.

                              Cordialement

                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 mars 2021 à 15:12:06

                                a priori avec, tu peux rechercher directement les attributs via select 

                                trouve=soup.select("[data-ist-init]")
                                val=trouve[0]["data-ist-init"]


                                autre façon

                                trouve=soup.find("div","c-faceplate")
                                val = trouve["data-ist-init"]
                                print(val)



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 mars 2021 à 19:17:26

                                  Bonsoir,

                                  Merci beaucoup à vous deux. Effectivement, il fallait commencer par récupérer la liste de données dans une variable. Ensuite, travailler cette variable pour extraire les éléments recherchés.

                                  Mon erreur était de vouloir aller chercher l' information directement.

                                  Merci encore et bonne soirée.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Cours bourse Boursorama

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown