Partage
  • Partager sur Facebook
  • Partager sur Twitter

Questions diverses

    19 octobre 2020 à 15:19:15

    Bonjour à tous, il se trouve qu'à force de faire des recherches sur internet afin de progresser en Python, j'ai acquis des connaissances en Python mais j'ai aussi accumulé des questions. Je ne pense pas que beaucoup de monde pourra me répondre à toutes ces questions tout seul. Mais si vous savez répondre à une ou plusieurs de ces questions, s'il vous plaît, faites-le (sans forcément répondre à toutes les questions).

    Mes questions :

    - J'avais un problème commun avec turtle et pygame. En effet, les deux se mettaient à buger. Pour turtle, j'ai compris qu'il manquait une ligne à la fin (mainloop()). Je suppose donc qu'il en est de même pour pygame. Si tel est le cas, que faut-il faire pour que pygame fonctionne correctement ?

    - Par ailleurs, j'aimerais pouvoir récupérer le code html d'une page web. Pour cela, j'utilisais le module urllib. J'ai eu des problèmes avec ce module. Ainsi, j'ai cherché un autre moyen de récupérer le code html d'une page web. Pour cela, j'ai trouvé le module requests. Je voudrais cependant savoir ce que font très concrètement les fonctions get, post, delete et put du module requests. L'attribut content d'une valeur retournée par get est-il le code html de la page ou bien faut-il consulter l'attribut text  pour avoir le code html ?

    - Que fait précisément l'authentification (avec l'argument auth) de la fonction requests.get ?

    - Comment récupérer le code html d'une page web en étant dans une session ? Peut-être que cela se fait avec la fonction get en renseignant l'argument auth... Par exemple, dans un jeu vidéo avec une somme de dollars en réserve contenue dans un code html, comment récupérer, à partir de Python, sa somme de dolllars ? (Cet exemple est fictif mais est présent pour illustrer ma question "Comment récupérer le code html d'une page web en étant dans une session ?").

    - Comment envoyer des e-mails avec le module smtplib de Python ? J'ai trouvé cela :

    import smtplib    ## Importation du module
    serveur = smtplib.SMTP('smtp.gmail.com',587)## Connexion au serveur sortant (en précisant son nom et son port)
    serveur.starttls()## Spécification de la sécurisation
    serveur.login("VOTRE ADRESSE MAIL","VOTRE MOT DE PASSE")## Authentification
    message ="VOTRE MESSAGE"## Message à envoyer
    serveur.sendmail("VOTRE ADRESSE MAIL","ADRESSE MAIL DU DESTINATAIRE", message)## Envoie du message
    serveur.quit()## Déconnexion du serveur

    Cependant, en testant ce script en mettant mon mot de passe et l'adresse e-mail, j'ai eu l'erreur suivante :

    Traceback (most recent call last):

      File "<string>", line 420, in run_nodebug

      File "<module1>", line 4, in <module>

      File "C:\EduPython\App\lib\smtplib.py", line 652, in login

        raise SMTPAuthenticationError(code, resp)

    smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials d7sm16314350wmd.48 - gsmtp')

    Il se pourrait que d'autres questions me reviennent mais déjà, merci pour les réponses à ces questions ! :)

    • Partager sur Facebook
    • Partager sur Twitter
      20 octobre 2020 à 8:05:30

      Faudrait ptet changer dans le code l'adresse mail, le mot de passe, et le serveur smtp :-°
      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2020 à 12:02:58

        pour les autres questions, tu ne recherches sans doute pas assez :p

        pour pygame, il y a une boucle de lecture des événements => https://riptutorial.com/fr/pygame 

        content et text sont quasiment la même chose, text c'est pour accéder à la réponse en texte, content c'est pour y accéder en octet (byte). la réponse d'un get n'est pas forcément de l'html, ça dépend de la requête (c'est aussi souvent du json) https://requests.readthedocs.io/en/master/user/quickstart/#response-content 

        auth, bah ça sert pour l'authentification si besoin, donc nom utilisateur + mot de passe envoyé au site

        pour récupérer une info d'un site, il faut faire du scrapping, donc parcourir la page html en s'aidant des balises html et autres classes et identifiants (il faut connaitre la structure du site pour récupérer l'info voulue, ce qui peut se faire en affichant le code source de la page ou l'outil "inspecter" du navigateur). Mais ça peut aussi se faire via une requête à une API du site (si disponible) 

        pour l'envoi d'email => https://realpython.com/python-send-email/#getting-started  et l'erreur, il faut comme l'a dit thelinekioubeur, mettre des informations existantes de ton compte mail

        • Partager sur Facebook
        • Partager sur Twitter
          20 octobre 2020 à 12:22:51

          Bonjour, merci pour tes réponses. Mais je savais déjà faire du scraping sur le web. Ce que je voudrais savoir faire, c'est faire du scraping de données dans une session, c'est-à-dire que Python se connecte à mon compte sur un site et y récupère des données relatives à mon compte et non (par exemple) des données sur un blog. Vois-tu ce que je veux dire ? Cela se fait-il avec l'argument auth ? J'ai essayé de le faire avec cet argument mais cela n'a visiblement pas marché... Est-ce qu'il faut donner le mot de passe sous forme de hash ? Ou l'identifiant sous une autre forme que celle que l'on utilise pour se connecter au site ?
          • Partager sur Facebook
          • Partager sur Twitter
            20 octobre 2020 à 12:58:57

            il faut que la page que tu accèdes nécessite l'authentification pour pouvoir y accéder (je pense)
            • Partager sur Facebook
            • Partager sur Twitter
              20 octobre 2020 à 13:51:37

              La méthode d'authentification n'est pas la même sur tous les sites, donc va dans les outils de développements de ton navigateur pour voir ce qui se passe sur le réseau quand tu te connecte.
              • Partager sur Facebook
              • Partager sur Twitter
                26 octobre 2020 à 1:01:17

                Il dit qu'il faut étudier le fonctionnement du site pour comprendre comment marche l'authentification sur ce site en particulier, parce que chaque site fait ça un peu différemment.
                • Partager sur Facebook
                • Partager sur Twitter

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

                  26 octobre 2020 à 23:00:22

                  Merci pour ta réponse @LouppSolitaire. (J'aime bien ton image de profil. Tu aimes les animaux ?)

                  Pour revenir sur le sujet du forum : Qu'est-ce qui peut varier ? C'est-à-dire ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 octobre 2020 à 3:30:18

                    Tout peut varier.

                    Les trucs de base ce sera une requête http post vers une url qui varie (trouvable dans le formulaire html de la page de login) et des paramètres qui varient (souvent un champ email et mot de passe, mais il faut utiliser le bon nom de paramètres, toujours dans le formulaire html).

                    Après il faudra ajouter d'éventuels jetons csrf.

                    Sinon ça peut marcher par openid, ou utiliser du Javascript.

                    Une fois la requête envoyée il faudra récupérer le résultat qui sera souvent un cookie, et l'utiliser à chaque requête qui nécessite une authentification.

                    Si tu sais faire des sites web dynamiques ça devrait aller, sinon tu vas galérer.

                    Sinon oui, j'aime bien les animaux, mais celui là est particulier : https://knowyourmeme.com/memes/pun-dog 

                    -
                    Edité par LoupSolitaire 27 octobre 2020 à 3:32:59

                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      27 octobre 2020 à 7:56:14

                      Sinon c'est quel site que tu veux scrap ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 novembre 2020 à 21:56:13

                        D'accord. :) Merci. J'ai programmé en html et CSS mais je ne sais pas faire des sites dynamiques avec php par exemple.

                        thelinekioubeur a écrit:

                        Sinon c'est quel site que tu veux scrap ?


                        Je voudrais scraper Empire Immo. (Par exemple, m'entraîner à faire un programme qui m'indiquerait des informations sur la page des mes finances).

                        Mais disons qu'il y a beaucoup de choses que je veux savoir pour m'améliorer en informatique.

                        -
                        Edité par LapinLapinou 10 novembre 2020 à 22:00:32

                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 novembre 2020 à 10:19:05

                          Bonjour,  

                          Pour apporter d'autres précisions sur ce qui a déjà été dit :

                          Pour le cas de turtle, pygame ou les toolkits graphique, il est nécessaire de recevoir les événements et de mettre à jour l'affichage régulièrement. En règle générale, on utilise une boucle principale (mainloop()).  

                          Dans le cas de PyGame, c'est au développeur d'implémenter cette boucle, en lisant les événements, en les traitant et dessinant la nouvelle frame à afficher à l'utilisateur. Je te renvoie au code d'exemple de PyGame (https://github.com/pygame/pygame/blob/55ac5530bf9790943ad39954e2abc07bf5a21c87/examples/aliens.py#L314)

                          La requête du protocole http requière une méthode et un chemin (https://developer.mozilla.org/fr/docs/Web/HTTP/Aper%C3%A7u#Requ%C3%AAtes). Dans le cas de requests, les fonctions get, post, put, delete correspondent aux méthodes GET, POST, PUT et DELETE (il en existe d'autres).  

                          Ces méthodes sont notamment utiles pour les API rest qui permettent d'indiquer un traitement spécifique d'une resource en fonction de la méthode.

                          Exemple : le chemin /api/product pour accéder à la ressource produit et les méthodes

                          • GET -> pour lire,
                          • POST -> pour créer,
                          • PUT -> pour mettre à jour,
                          • DELETE -> pour supprimer.

                          Contrairement aux API rest, Les sites web utilisent essentiellement les méthodes GET pour accéder à une page et POST lorsque le serveur doit traiter un formulaire (pas besoin de javascript côté navigateur pour ça).

                          L'argument auth de la fonction requests.get() te permet de créer un mode d'authentification sur le serveur. Le protocole http en prévoit plusieurs (basic, digest, ...). Cette authentification est envoyée dans le header de la requête http et certains serveurs utilisent ces données pour authoriser ou non l'accès aux ressources du serveur.  

                          Les sites web utilisent principalement une authentification via un formulaire avec méthode POST, car dans un navigateur sans javascript il est impossible d'ajouter l'authentification dans le header. Donc les identifiant et mot de passe sont envoyés dans le body de la requête POST.

                          Dans le cas du web scraping nécessitant une authentification, il te faudra utiliser une session à partir requests.session(): https://fr.python-requests.org/en/latest/user/advanced.html  

                          L'objet session garde les cookies que tu obtiens lors de l'accès au site (formulaires protégés par token CSRF) ou ceux obtenus après authentification (qui indique au serveur quelle est ton identité).

                          La question dans ton cas est de comprendre comment fonctionne le serveur.  

                          Pour le savoir, tu peux utiliser l'outil de debuggage de chrome ou firefox, onglet network (ou réseau) en indiquant de préserver les logs.  

                          Tu pourras identifier quelles sont les requêtes http utilisés pour l'authentification (authentification via header, via formulaire POST et le format du body) et celles utilisées pour l'accès aux autres pages.

                          J'attire ton attention sur le fait que certains serveurs ont des niveaux de sécurité assez fort. Il peut y avec des contrôles sur les headers de la requête afin vérifier que l'authentification se fait via navigateur (exemple du contrôle du header User-Agent), voire des contrôles avec une logique JavaScript difficile à reproduire sans navigateur (cf accès aux service google sans API). Dans ces cas, s'orienter vers un outil comme selenium serait peut-être plus adapté.

                          -
                          Edité par Little Programmer 11 novembre 2020 à 10:32:01

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Questions diverses

                          × 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