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

  • #31
    [QUOTE=fred;30819]J'ai rien compris à la demande, donc je peux pas aider... je n'ai pas détailler car c'est le même problème que celui pour lequel tu m'as donné la solution le 7janvier et je t'en remercie. Mais je n'y arrive pas sur la page cité!

    L'histoire des lignes par exemple, pas compris !J'ai testé le code donné par DréAmus pour ne prendre que quelques lignes de code d'une page "html" (il ne fonctionne pas cher moi? j'en ai proposé une variante) J'espérai avec trouver plus facilement les balises clés!
    Dans la ligne 961 du code de la page: view-source:http://www.zacks.com/stock/research/...-announcements

    je voudrai extraire "1/28/2016" et (7.25%) (Par exemple)


    Et comme tu me disais 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...

    ET quoi de mieux que des exemples pratiques pour progresser!

    Bonne soirée...

    Commentaire


    • #32
      [QUOTE=dramslinux;30820]bah @Fred je suis d'accord avec toi, sa question n'est pas assez complète:
      Si je ne me trompe je suis dans la page de commentaire du Cours N°11 de @Fred que j'ai lu et relu.
      Si je m'était adressé à toute la communauté.... Bien sur..!

      Commentaire


      • #33
        micho je ne comprends plus rien là, tu voulais extraire des valeurs sur zacks.com j'ai fai un code pour toi qui marche,et là tu me propose un autre?? tu avais la solution alors? en plus il ne marche pas.
        bonne journée a toi, j'espere que tu parviendras a trouver la solution

        Commentaire


        • #34
          Bonjour @dramslinux le problème c'est que les réponses son classé par ordre d'arrivé le code que j'ai écris concerne le message du 08/02/2016 de @Dréamus il fonctionne "non indenté" (mode réponse rapide).
          Je suis apparemment comme toi intéressé par la récupération de données financière (je regarde de plus près le code que tu a fais pour "zacks.com" sur ta page).
          Avec les explications possédantes données par @fred j'y arrive très bien sur le site "finviz.com"

          Commentaire


          • #35
            [QUOTE=dramslinux;30826]
            Bien ton code (je ne sais pourquoi il bug cher moi de la même façon que celui de @Dréamus ?):
            Affichage du lien html puis il tourne à vide...?

            Mais à vos deux apport je suis arrivé ceci et bingo ça marche!
            Code PHP:
            from urllib.request import urlopen
            import re

            URL
            = ("http://www.zacks.com/stock/research/CAT/earnings-announcements")
            data urlopen(URL).readlines()
            regex2=re.compile("([0-9]+\.[0-9]+%)")# Expression régulière pour chercher les différentes valeur de 'Surprise'
            regex1=re.compile("[0-9]+/[0-9]+/[0-9]+")# Expression régulière pour chercher les différentes dates

            0
            for line in data:
                
            #print(i, line, end="\n")
                
            if == 955:
                    
            #print(i, line, end="\n") #pour vérifier que l'on cible la bonne ligne
                    
            valeurs1=regex1.findall(line.decode("utf-8")) # ici c'est la recherche des dates, on fait appel à décode pour convertir les lignes qui sont en binaire en chaine de carractère
                    
            print(valeurs1[0])
                    
            valeurs2=regex2.findall(line.decode("utf-8")) # on fait pareil
                    
            print(valeurs2[0])
                    break
                
            += 
            Et j'ai trouver pour écrire proprement le code sur hackademics:
            Tu a un Bouton "Editeur avancé" puis bouton 2eme ligne à gauche:"Ajouter le BB code (PHP]
            Puis copier collé de ton code entre les deux balises

            Bonne journée

            Commentaire


            • #36
              je voudrai extraire "1/28/2016" et (7.25%) (Par exemple)
              Si tu choisis un numéro de ligne spécifique, qui te dit qu'à la prochaine mise à jour du site, se sera à la même ligne que se trouve les informations que tu souhaites ? Il faudra remodifier le script, autant lire manuellement dans ce cas. Soit tu trouves un moyen automatisé et qui fonctionne à tous les coups, soit tu ne fais pas de script, il faut toujours voir l'intérêt concret à faire un script, car ça prend quand même du temps à coder

              Commentaire


              • #37
                Ta remarque est judicieuse mais je n'ai pas put faire mieux!
                la ligne semble stable sur ce site et ma variable est "CAT"
                Si tu y ajoute ceci tu vois sont intérêt: CAT ou A ou I....
                Code PHP:
                def surprise():
                    
                    
                stock0="a"   
                    
                while stock0 != ""
                        
                stock0 input("STOCK? ou fin:   ")
                        if 
                stock0=="fin" :
                            break
                        
                URL= ("http://www.zacks.com/stock/research/"+stock0+"/earnings-announcements")
                        print(
                URL)
                        try:
                            
                data urlopen(URL).readlines()
                            
                        
                except:
                            print(
                'inconnu..!')
                            continue
                surprise() 
                Si tu as mieux avec la méthode de recherche des balises clefs!
                Je n'ai pas réussi c'est pour cela que je faisais appel à ton expérience

                PS: pour @DréAmus et @Dramslinux vos codes sont OK! Mea-culpa je n'avais pas la commande "input" en tête car mes recherches sont faites à partir d'un fichier ".csv" plus de 6000titres dont "CAT" et ma sélection est faite à partir de données récupérés sur plusieurs sites, puis écrites dans un autre fichier.csv
                Le prochain que j'aimerai utiliser sera: http://www.marketwatch.com/investing...CAT/financials
                J'ai essaye avec les balises mais je cible encore très mal.
                Merci à tous les trois pour vos contributions
                Dernière modification par micho, 25 février 2016, 16h42.

                Commentaire


                • #38
                  Ok, j'ai pris 20 minutes pour le faire, je dirais que pour un débutant c'est équivalent à minimum 2 heures.

                  Voilà ce que je propose

                  Code:
                  import re
                  from urllib.parse import unquote, urlparse
                  
                  from lxml import html
                  import requests
                  
                  PATTERN = r'\[ (.+), ".+", ".+" \]'
                  
                  URL = "http://www.zacks.com/stock/research/CAT/earnings-announcements"
                  page = requests.get(URL, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'})
                  tree = html.fromstring(page.content)
                  
                  script = tree.xpath('//script[contains(., "earnings_announcements_earnings_table")]')[0]
                  match = re.findall(PATTERN, script.text)
                  if match:
                      res = ''
                      for char in match[0]:
                          if char != '[' and char != ']':
                              res += char
                          elif char == ']':
                              break
                  
                  res = [value.strip().strip('"') for value in res.split(',')]
                  date, period, estimate, reported, *allValues = res
                  print(date)
                  print(period)
                  print(estimate)
                  print(reported)
                  Bonne continuation...

                  topic dont je me suis inspiré...
                  Dernière modification par fred, 25 février 2016, 19h57.

                  Commentaire


                  • #39
                    "j'ai pris 20 minutes pour le faire, je dirais que pour un débutant c'est équivalent à minimum 2 heures"
                    Merci ton code tourne impeccable mais...
                    Tu es modeste @fred:Pour un cancre comme moi en une semaine je n'ai pas encore assimilé...!

                    j’essai d’appliquer sur la page de recherche Google qui je crois est bâti sur le même principe et bloc encore
                    j'ai trouvé ce site intéressant pour compléter mes connaissances: https://pythonprogramming.net/urllib-tutorial-python-3/
                    Dont je tire ce code:
                    Code HTML:
                    import urllib.request
                    import re
                    
                    url = 'https://www.google.fr/search?q=finviz.com/quote.ashx%3Ft%3D&start=0'
                    
                    headers = {}
                    headers['User-Agent'] = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
                    req = urllib.request.Request(url, headers = headers)
                    resp = urllib.request.urlopen(req)
                    respData = resp.read()
                    #print(respData)   # contient:
                    #<h3 class="r"><a href="http://finviz.com/quote.ashx?t=AAPL"
                    #<h3 class="r"><a href="http://finviz.com/quote.ashx?t=GDX"
                    #<h3 class="r"><a href="http://finviz.com/quote.ashx?t=VRX"
                    
                    stock=  re.findall(r'[A-Z]["]+',respData,) #TypeError: can't use a string pattern on a bytes-like object
                    Je cherche à obtenir la liste des symboles dans leur ordre de "popularité" ici pour la première page de recherche dans Google je devrai obtenir:

                    [AAPL, GDX, VRX, ....]

                    J'ai essayé sur le modèle de ton code sans plus de succès:

                    Code HTML:
                    import re
                    from urllib.parse import unquote, urlparse
                    from lxml import html
                    import requests
                    
                    URL = "https://www.google.fr/search?q=finviz.com/quote.ashx%3Ft%3D&start=0"
                    page = requests.get(URL, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'})
                    tree = html.fromstring(page.content)
                    print(tree) #<Element html at 0x7f73b2a93408>
                    print(page)#<Response [200]>
                    script = tree.xpath('//script[contains(., "href"),+]')[0] 
                    print (script) #<Element script at 0x7f6e742beb88>
                    
                    PATTERN = r'[A-Z]["]+' #lxml.etree.XPathEvalError: Invalid predicate
                    
                    match = re.findall(PATTERN, script.text)
                    print(match)
                    Si tu as 5 minutes..!

                    Commentaire


                    • #40
                      Pour l'erreur,

                      stock= re.findall(r'[A-Z]["]+',respData,) #TypeError: can't use a string pattern on a bytes-like object
                      modifie par,

                      stock= re.findall(b'[A-Z]["]+',respData,)
                      Après j'ai pas le temps de tester, trop de boulot, désolé...

                      Commentaire


                      • #41
                        Merci,
                        b comme bytes je suppose! Cela lève bien l'erreur.
                        j'avais trouvé en ajoutant:
                        val=respData.decode("utf-8")
                        reste à revoir mon "expression régulière"! Qui ne me rend pas ce que j'escompte..
                        Cancre mais laborieux le "micho"
                        stock= re.findall(r'[t][=]([A-Z]{1,6})["]',val)
                        Et enfin le résultat:
                        ['AAPL', 'GDX', 'VRX', 'AMZN', 'TWTR', 'SPY', 'QQQ', 'FB', 'T']
                        Je ne dirait pas en combien de temps...
                        Il suffi de regarder l'heure du message...!
                        Dernière modification par micho, 01 mars 2016, 17h54.

                        Commentaire


                        • #42
                          Bonjour Fred
                          la page n'a pas bougé depuis longtemps!
                          les pages on évoluer et sont mouvantes ainsi que les liens de téléchargement ...!
                          exemple dans : https://finance.yahoo.com/quote/TSLA/history?p=TSLA
                          le lien pour télécharger : <a class="Fl(end) Mt(3px) Cur(p)" href="https://query1.finance.yahoo.com/v7/finance/download/TSLA?period1=1492518895&amp;period2=1495110895&amp;interval=1d&amp;events=history&amp;crumb=K4K25Wpw rXr" download="TSLA.csv"
                          impossible d'automatiser avec python à ma connaissance voir: http://stackoverflow.com/questions/4...rl-not-working
                          Si tu as ou si quelqu'un a une solution?
                          Merci
                          Dernière modification par micho, 18 mai 2017, 14h04.

                          Commentaire


                          • #43
                            Bonjour,

                            Il faut me remettre dans l'histoire, que veux-tu faire ? Qu'attends-tu comme résultat ? Quelle page est à analyser ? Etc... Toutes les infos supplémentaires sont les bienvenues...

                            Commentaire


                            • #44
                              Bonsoir ,
                              Dans la page finance.yahoo.com prise comme exemple il y a un bouton "Download Data" l'adresse du lien change à chaque connexion :
                              Depuis Mozilla
                              https://query1.finance.yahoo.com/v7/...mb=K4K25WpwrXr
                              Ce lien télécharge un fichier .csv
                              Le symbole TSLA est bien sûr ma variable qui fait parti d'une liste comme dans mes anciennes questions
                              autre exemple:
                              https://finance.yahoo.com/quote/SPY/history?p=SPY
                              le lien de cette page est pour ma connexion de l'instant présent:
                              https://query1.finance.yahoo.com/v7/...mb=K4K25WpwrXr

                              Mais si tu ouvre le lien depuis ton navigateur tu aura un message d'erreur (je crois!)
                              crumb=K4K25WpwrXr est constant depuis mon ordi mais sera sûrement différant chez toi
                              et: period1=1492541239&period2=1495133239 correspond à 1an d'historique mais c'est un code variable à chaque ouverture de la page initial...

                              Le problème c'est de télécharger une série de fichier d'historique depuis python comme on pouvait le faire avec leur ancien site (qui ne fonctionne plus depuis hier) ou les liens étaient immuables
                              Si tu arrive à contourner le problème tu tire pas mal de monde de la merde..!
                              Dernière modification par micho, 18 mai 2017, 20h37.

                              Commentaire


                              • #45
                                Bonjour,

                                Il y a peut-être un autre moyen de l'avoir,

                                https://www.google.com/finance/histo...tput=csv&q=SPY

                                Différentes manières -> ICI

                                Lien de ma recherche -> ICI

                                Commentaire

                                Chargement...
                                X