Annonce

Réduire
Aucune annonce.

Lecture et analyse d'une page web, téléchargement de fichiers - COURS N°11

Réduire
Ceci est une discussion importante.
X
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #16
    oui je ne savais pas pour la nouvelle façon d'utiliser urllib pour les chemins, à croire que je faisais tout à l'ancienne
    encore merci , vous m'avez été d'une grande aide, mon code est enfin propre, et je l'utilise en ce moment
    je vais fair un post sur le même sujet ce serait vraiment sympa d'avoir des idées venant de vous aussi

    Commentaire


    • #17
      Merci de m'avoir lu et bonne journée...[/QUOTE]
      Bonjour Fred,
      Merci pour ce Tuto j'ai pu télécharger les Beatles (mais le site: "http://hcmaslov.d-real.sci-nnov.ru" est inaccessible depuis peu) et comme je ne suis pas une "flèche" je n'ai pas encore bien assimilé la recherche des patterns:
      Je voudrai simplement sortir un chiffre dans une page web et n'y arrive pas:

      BASE_URL = "http://www.serenitystocks.com/stock/us/cat"
      data = urlopen(BASE_URL).read()
      print(data) #j'ai le code de la page mais après...?
      #j'ai fait:
      from bs4 import BeautifulSoup as Bs
      soup = Bs(data, 'html.parser')
      print(soup.get_text()) #j'ai tout le texte de la page

      Dont le texte: "Defensive Price (Graham Number): $64.55"

      Mais je n'arrive pas à sortir juste le prix: "$64.55"
      Que je voudrai par la suite ajouter à un fichier .cvs

      Si tu pouvais m'aider?
      Merci
      Dernière modification par micho, 15 décembre 2015, 10h29.

      Commentaire


      • #18
        Bonjour,

        Là j'ai pas le temps, si tu peux attendre jusqu'au 19 décembre, je pourrais sans doute t'aider,seulement à cette heure-ci et les autres suivantes, c'est pas faisable, désolé.

        Par contre Beautiful qui utilise d'ailleurs lxml, est un module qu'à chercher à comprendre d'autres membres de ce forum, comme Dreamus par exemple, et s'il a le temps, il pendra sans doute le soin de te répondre

        Commentaire


        • #19
          Merci,
          en attendant je lis tes fiches Python depuis la N°1
          Bonne journée

          Commentaire


          • #20
            Bonjour,
            j'ai accès à:"http://hcmaslov.d-real.sci-nnov.ru/" ce matin!
            et j'ai assimilé un peu plus tes explications:
            elements = tree.xpath('.//div[contains(text(), "Defensive Price (Graham Number):")]/@class')
            me retourne bien:
            #['field-label']]
            Mais je ne vois pas comment aller chercher >$64.55< trois "class" plus loin?
            Remarque: à quoi correspond le "." dans ".//div" si je le supprime j'ai le même retour
            Bonne journée
            Dernière modification par micho, 17 décembre 2015, 11h35.

            Commentaire


            • #21
              Comme je l'ai dis plus haut, il faut un certains temps pour assimiler, le xpath est un moyen très puissant, mais dont on a besoin de beaucoup d'expériences pour le maîtriser un peu...

              Le code pourrait être

              Code:
              from lxml.html import fromstring as df
              from urllib.request import urlopen
              
              URL = "http://www.serenitystocks.com/stock/us/cat"
              
              data = urlopen(URL).read()
              doc = df(data)
              elements = doc.xpath("//div[@class='field-item even']") # avec des print on analyse ce résultat
              # for e in elements:
              #     print(e.text) on se rend compte que l'item 1 correspond à nos besoins
              price_defensive = elements[1].text
              
              print(price_defensive)

              Commentaire


              • #22
                Bonjours et tous mes vœux pour 2016
                Voila ce que ça donne avec tes conseils: Mais pourrai tu partager un peu plus ton expérience d'xpath
                Car je n'arrive pas à cibler avec précision l'eléments[25] qui fluctue (variation entre ADM et FN par exemple)
                Une de mes tentative de débutant...!
                Faux!= doc.xpath("//div/class[contains(text(), 'Tangible Book Value Per Share:')]/[@class='field-item even']")
                Et si j'essais avec d'autre site mon résultat n'est pas brillant
                Merci


                from lxml.html import fromstring
                from urllib.request import urlopen

                def Gram():
                stock0="a"
                while stock0 != "":
                stock0 = input("STOCK? ou FIN: ")
                if stock0=="fin" :
                break
                URL = "http://www.serenitystocks.com/stock/us/"+stock0+""
                try:
                data = urlopen(URL).read()
                except:
                print('inconnu..!')
                continue
                doc = fromstring(data)
                elements = doc.xpath("//div[@class='field-item even']")
                ##Faux!= doc.xpath("//div/class[contains(text(), 'Tangible Book Value Per Share:')]/[@class='field-item even']")
                #for e in elements:
                #print(e.text) # l'item 1 correspond à Defensive Price
                stock = elements[0].text
                Defensive = elements[1].text
                Enterprising = elements[2].text
                NCAV = elements[3].text
                Close = elements[6].text
                Value = elements[7].text
                Tval = elements[25].text
                val =float(Value[0:4])
                print("stock", stock)
                print (val)
                if val > 0 :
                print ("Value/Close(%)",Value)
                print("NCAV Price", NCAV)
                print("Enterprising", Enterprising)
                print("Defensive Price", Defensive)
                print ("Tangible B.value/Share", Tval)
                print("Previous Close", Close)
                Gram()
                Fichiers attachés
                Dernière modification par micho, 07 janvier 2016, 18h45.

                Commentaire


                • #23
                  Il faut aller le chercher un peu plus loin celui-ci

                  Code:
                  from lxml.html import fromstring as df
                  from urllib.request import urlopen
                  
                  URL = "http://www.serenitystocks.com/stock/us/cat"
                  
                  data = urlopen(URL).read()
                  doc = df(data)
                  elements = doc.xpath("//div[@class='field field-name-field-bvps field-type-number-decimal field-label-inline clearfix']")
                  line = elements[0].text_content() # Affichage du texte parent + enfant
                  value = line.split()[-1]
                  print(value)

                  Commentaire


                  • #24
                    Merci,
                    La précision est chirurgical!

                    Commentaire


                    • #25
                      Je me suis interresser au principe du grabbing URL, et python s'y prête fortement. Voici un script simples basés sur le tutoriel de Fred qui permet de ne grab que les 3 premières lignes d'un site.

                      Code:
                      # python 3
                      # -*- coding: utf-8 -*-
                      
                      #!/usr/bin/python
                      #-----------------------------------------------------
                      # Name : grabheader.py
                      # Version : Dreamus recode
                      #-----------------------------------------------------
                      
                      
                      ###########################################################
                      
                      from urllib.request import urlopen
                      
                      # Choice the URL of target
                      orul = input("Ecrivez l'url :")
                      i = 0
                      for line in urlopen(orul):
                          # Decode
                          line = line.decode()
                      
                          # Print
                          print(i, line, end="")
                      
                          # Limit of 3 first lines
                          if i == 3:
                              break
                          i += 1
                      Résultat :

                      Ecrivez l'url :http://hackademics.fr
                      0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      1 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="fr" id="vbulletin_html">
                      2 <head>
                      3
                      J'en ai fait un autre que je doit finir car j'ai du taff à côté, sur la possibilité de sélectionner ce que l'on va grab sur la page du site.
                      Dernière modification par DreAmuS, 08 février 2016, 11h50.

                      Commentaire


                      • #26
                        [QUOTE=DreAmuS;30624]Je me suis interresser au principe du grabbing URL, et python s'y prête fortement. Voici un script

                        Bonsoir,
                        j'ai dût zappez quelque chose car cela ne me retourne que l'url! Même avec i=100 sans message d'erreur?
                        url="http://www.zacks.com/stock/research/CAT/earnings-announcements"

                        je suis intéressé par les lignes:954 à 957

                        var obj = {
                        "earnings_announcements_earnings_table" :
                        [ [ "1/28/2016", "12/2015", "$0.69", "$0.74", "<div class=\"right pos positive pos_icon showinline up\">0.05 (7.25%)</div>", "Before Open" ] ,

                        Et là je bloc encore pour extraire la date "1/28/2016" et la valeur "(7.25%)"

                        Ce malgré vos explications:
                        Si vous avez un peu de temps à m'accorder
                        Toi ou Fred qui m'a déjà bien aidé
                        Merci

                        Commentaire


                        • #27
                          en demandant à toute la communauté Hackademics tu recevrai plus d'aide je pense car tous ne sont pas en ligne au même moment
                          j'ai écrit un code avec assez de commentaire qui t'aiderai peut etre à comprendre ou avoir une idée

                          https://abidjancodeur.wordpress.com/...dune-page-web/

                          j'ai mis le lien car ici le code n'est pas indenté et coloré, peut etre quelqu'un me dira comment faire dans un commentaire
                          Dernière modification par dramslinux, 24 février 2016, 19h35. Motif: absence d'indentation et de coloration syntaxique

                          Commentaire


                          • #28
                            J'ai rien compris à la demande, donc je peux pas aider... Si je comprend j'aide et si vous voulez que je comprenne alors faut bien expliquer.

                            L'histoire des lignes par exemple, pas compris ! Donc un topic propre, détaillé, où je peux donner une réponse détaillée, c'est un genre de mini tuto, et c'est bien plus efficace, que de répondre à une question que la moitié des membres comprennent.

                            Bonne soirée...

                            Commentaire


                            • #29
                              bah @Fred je suis d'accord avec toi, sa question est pas assez complète, j'ai eu une petite idée de ce dont il voulait parler puisque j'ai rencontré ce problème récemment, si tu t'en souviens je me servais de ton pti tuto http://hackademics.fr/showthread.php...s-COURS-N%B011 pour arriver à comprendre et ça m'a aidé

                              Commentaire


                              • #30
                                Ton code ne marche pas! Je te propose celui là:

                                from urllib.request import urlopen

                                URL= ("http://hackademics.fr/forum.php")
                                data = urlopen(URL).readlines()
                                i = 0
                                for line in data:
                                print(i, line, end="\n")
                                # Limit of 3first lines
                                if i == 2:
                                break
                                i += 1

                                Commentaire

                                Chargement...
                                X