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 !
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)
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 ?
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.
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.
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.
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()).
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.
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
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.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...