Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va continuer notre script pour faire défiler les mois, donc là pour l'instanton fait juste passer au mois suivant en mettant la date spécifique ici, donc le 1er mars, et nousce qu'on va vouloir faire c'est partir de la date d'aujourd'hui, rajouter un mois et puis continuer
00:00:14 :comme ça pour faire défiler les mois à chaque fois afin de pouvoir ensuite récupérer la totalitédes prix pour chaque mois et faire une moyenne et voir quel mois est le moins cher pour voyager dansune location. Donc là on va un petit peu sortir de ce script, on va tout simplement revenir dans
00:00:28 :un terminal pour lancer Python 3 et on va faire nos tests à l'intérieur d'un terminal tout simplementpuisqu'on va juste faire de la manipulation de date, donc on n'a pas besoin de se lancer dansle scrapping pour ça, on veut juste déjà faire notre petite recette à côté et donc je vais le
00:00:41 :faire dans un terminal. Avant ça je vais installer un autre module bien pratique qui est DateUtilsqui va me permettre de récupérer la date du prochain mois de façon un peu plus robuste quece qu'on aurait avec les modules de date de base de Python comme DateTime qui ne sont pas très
00:00:55 :faciles à manipuler surtout quand il y a des années bisextiles et tout ce genre de choses quiarrivent avec les dates qui généralement peuvent poser des problèmes. Donc on a un module qu'il
00:01:04 :faut installer en plus qui s'appelle DateUtils qui va nous être bien pratique pour ça, pour êtreassuré qu'on va facilement récupérer la date du premier jour du mois suivant. Donc on va l'installer
00:01:13 :avec pip, donc le package c'est PythonDateUtils tout en minuscules comme ça avec un tiretentre les deux, DateUtils, on l'installe avec pip et une fois que c'est fait et bien on va pouvoirlancer un terminal Python 3 et importer les librairies dont on va avoir besoin. Donc on va
00:01:28 :déjà importer le module DateTime à partir de la librairie DateTime, donc là il y a beaucoup dechoses qui se ressemblent dans cette librairie, elle n'est pas très facile à manipuler, je trouveque les noms sont un peu confus. Donc ça c'est une bibliothèque qui est disponible de base dans
00:01:41 :la librairie standard de Python, je valide avec entrée et ensuite depuis DateUtils.relativeDeltaon va importer relativeDelta. Donc comme vous le voyez dans les gens qui écrivent ce genre de
00:01:52 :bibliothèques, ils aiment bien confondre les gens un petit peu en mettant des noms qui sontsimilaires à chaque fois pour les modules et les classes qu'on va utiliser. Donc je lance tout ça
00:02:00 :et je vais récupérer la date d'aujourd'hui que je vais mettre dans une variable today avecDateTime.today tout simplement. On pourrait utiliser également now, la différence entre les
00:02:08 :deux c'est que today n'a pas les informations d'heure alors que now les a. Moi ce qui m'intéressec'est juste la date donc je vais rester avec today. Donc là si j'affiche today vous allez voir,
00:02:17 :donc pas today comme ça mais voilà juste la variable que je viens de créer, on a bien ladate d'aujourd'hui et en fait l'heure aussi. Alors je me suis planté, je croyais qu'il y avait
00:02:24 :une différence entre les deux mais apparemment non, les deux retournent, que ce soit today ounow, retournent exactement la même information avec la date mais aussi l'heure. Donc dans ce
00:02:33 :cas-ci ça ne change pas grand chose, nous ce qui va nous intéresser c'est vraiment l'année, le moiset le jour. Et ce que je vais faire maintenant c'est récupérer le prochain mois donc en faisant
00:02:41 :une variable par exemple nextMonth et je vais ajouter à ma date de today un relativeDeltad'un mois donc je vais mettre month égale à 1 et pour les jours je vais mettre day égale à 1. Alors
00:02:53 :attention ici on a bien un s à month puisque on veut en fait ajouter un nombre de mois donc çapourrait être 1, 2, 3 ou plus à notre date et pour le day en fait on veut le remplacer ici doncce n'est pas qu'on veut ajouter un nombre de day, on veut juste dire que le jour doit être le premier
00:03:07 :jour du mois. Donc ce qu'on fait ici c'est prendre la date d'aujourd'hui et lui ajouter un mois etremettre le jour à 1 pour qu'on ait donc la date du premier jour du prochain mois. Et ici si je
00:03:16 :voulais tout faire sur une ligne à la place du today je pourrais faire un dateTime.now toutsimplement ou dateTime.today comme on l'a vu ça ne change pas grand chose. Donc si je fais ça et
00:03:24 :que j'affiche nextMonth vous voyez que là on a bien donc la date du mois prochain donc là on estle 13 janvier au moment où j'enregistre cette vidéo et là on a bien le 1er février 2024 doncc'est ce qu'on voulait. Alors je vais copier cette ligne puisque c'est cette ligne que je vais
00:03:37 :utiliser dans mon script, je reviens ici on va importer les librairies nécessaires donc on vales mettre en haut ici from dateTime import dateTime et from dateUtil.relativeDelta import
00:03:48 :relativeDelta. Donc on arrive ici dans notre script avec le run, on va remettre notre url icidonc on va pour l'instant partir directement de cette url ici avec le continuer sans accepter etjuste la modification ici du mois prochain. Donc je vais mettre dans une variable ici nextMonth
00:04:06 :le mois prochain et là dans ce cas ci pour le premier mois on va devoir ajouter 2 moispuisqu'on va commencer en fait au mois d'après donc si je fais ma recherche au mois de janvierpar défaut il va m'afficher le mois de février donc de février à mars donc pour le premier on
00:04:21 :va faire un relativeDelta de 2 mois et je vais ensuite transformer cette information qui est unobjet date en chaîne de caractère donc je vais mettre nextMonthString par exemple et on va faireun string from time et on va lui donner une chaîne de caractère donc dans ce cas ci ça va être le
00:04:37 :format 0103 2024. Alors si vous voulez savoir le format de string from time vous avez un site trèsbien fait qui s'appelle stringfromtime.org et là vous allez voir les codes qu'il faut utiliser pour
00:04:47 :pouvoir récupérer à partir de l'objet date un format de chaîne de caractère donc nous ce quiva nous intéresser c'est bien d'avoir à chaque fois le jour du mois avec un zero paid decimalnumber donc pour le jour du mois pour le mois en tant que tel donc ça va être %D et %M et
00:05:02 :pour l'année on veut bien quatre chiffres ici donc ça va être %Y. Donc je reviens dans monscript on va avoir donc sous le format %D pour le jour, %M pour le mois, %Y majuscule pour l'annéeet là normalement on devrait avoir dans cette variable exactement ce qu'on cherche à avoir
00:05:20 :ici donc le 0103 2024 qui correspond à la date du premier jour du mois dans deux mois à partirde la date à laquelle je suis dans ce cas ci le 13 janvier donc je vais insérer ça avec un fstringici dans mon test ID je le mets ici à la place de la date qu'on avait mis qu'on avait hard codé
00:05:36 :en fait dans le script et je vais relancer mon script pour vérifier si avec tout ça ça fonctionnedonc je mets mon point de débug ici je lance le script sans débug mais avec le débug de PyCharmet on va voir si on arrive bien à naviguer au prochain mois comme ceci avec une date dynamique
00:05:50 :et ça semble fonctionner je le regarde ici on est bien rendu au 1er mars. Donc tout fonctionne on abien une date dynamique cette fois ci il ne reste plus qu'à mettre tout ça dans une boucle for pourpouvoir passer à travers les 12 prochains mois donc je vais arrêter mon script et enlever le point
00:06:05 :de débug ici et on va tout simplement faire une boucle for qu'on va mettre probablement à partird'ici donc je vais dire pour i in range de 12 donc on va faire 12 pour l'instant on va mettre tout çaà l'intérieur de notre boucle on pourrait mettre quelque chose un peu plus explicite ici je vais
00:06:22 :voir et ce relative delta on va devoir le bouger à l'intérieur donc on va même mettre tout çaici directement aussi dans la boucle et on va voir donc qu'est ce qu'on a besoin de changerlà on commence à 2 donc on a mis 2 alors peut-être qu'on va modifier notre range on va commencer à 2
00:06:38 :et on va aller jusqu'à 14 comme ça on va pouvoir mettre directement le i ici sans rien changernormalement donc là on va voir i qui va être égal à 2, 3, 4 etc jusqu'à 13 puisque si je me souviensbien le range est exclusif donc on va décaler à chaque fois on va faire un relative delta de 2
00:06:55 :mois ensuite de 3 mois de 4 mois etc à chaque fois avec le daytime.today alors ça je vaisquand même le mettre dans une variable au début qui va être égal ici à date time.today puisque
00:07:05 :je n'ai pas envie de le recalculer à chaque fois et ça pourrait poser des problèmes imaginez qu'onlance le script par exemple le dernier jour du mois à 23h59 et on aurait donc un changemententre le moment où on débute le script et le moment où on passe dans la boucle for donc je
00:07:19 :préfère garder cette date ici ancrée au début pour qu'elle ne bouge pas une fois qu'on est dansla boucle for donc ensuite ici à la place du 2 je vais mettre le i et normalement avec tout ça ondevrait être bon je vais avoir le next month qui va être égal à today avec à chaque fois un
00:07:33 :décalage de plus en plus grand donc on va décaler de 2 mois de 3 mois de 4 mois etc et à chaque foisça devrait se répercuter comme il faut ici dans la date donc je vais juste sortir le browser closeici puisque je ne veux pas fermer le navigateur à chaque fois et eh bien normalement ça devrait
00:07:48 :être tout bon je vais faire un petit page.wait for timeout ici pour qu'on puisse y voir un peuplus clair et que ça n'aille pas trop vite donc je vais mettre cinq secondes par exemple on peutmettre un peu moins 2,5 secondes et on va vérifier si avec tout ça ça fonctionne donc je relance le
00:08:03 :script je vais pas lancer un debug là avec le timeout ça devrait être un petit peu plus lentet on devrait avoir le temps de voir ce qui se passe donc je reviens ici je modifie et là rienne se passe donc je pense qu'on a un petit problème et comme on n'a pas fait de debug et bien je ne
00:08:17 :vois pas ce qui se passe donc je vais mettre un point de debug ici on va relancer ça j'aiprobablement fait une erreur quelque part avec le relative delta donc je vais relancer pour qu'ony voit un peu plus clair je vais mettre ça de côté voilà donc on arrive ici next month est égal
00:08:31 :alors là j'ai pas exécuté cette ligne je vais continuer donc next month 0 1 0 3 2024 donc çadevrait être bon normalement c'est ce qu'on voulait alors je vais séparer un petit peu mon écran pourqu'on y voit un peu plus clair donc là on continue on clique sur la barre on clique sur le bouton
00:08:49 :modifier et normalement on va récupérer voilà le premier jour alors ça a bien marché cette foisci on valide on clique sur le bouton rechercher et on a bien continué alors je vais y aller commeça pas à pas donc on attend 2.5 secondes on continue on va voir iq est égal à 3 je continue
00:09:08 :donc je pense que là c'était peut-être juste que le script est allé un peu trop vite et qu'il n'apas eu le temps de voir tous les éléments sur la page donc je vais continuer on reclique onclique sur modifier on passe au 1er avril on applique on continue et ça semble bien fonctionner
00:09:22 :donc je pense que c'est juste que le script est allé un peu trop vite donc pour ça si jamais vousavez ce genre de problème et bien on peut rajouter un petit timeout donc là il semble que ça se soitpassé après le modifier donc ce que vous pouvez faire c'est rajouter pour être sur un petit wait
00:09:35 :for timeout ici par exemple de 500 millisecondes ce qu'on peut faire aussi c'est faire un page pointwait for event et là on va avoir différents events on peut faire network idle ou DOM contentloaded donc le network idle en fait il est un petit peu dangereux puisqu'il va attendre jusqu'à
00:09:54 :ce qu'il n'y ait plus aucun événement du réseau donc ça ça peut être un peu dangereux parcequ'on peut avoir des sites qui vont continuellement aller chercher des informations de par périoderégulière dans toutes les secondes par exemple et dans ce cas ci on n'aura jamais vraiment un réseau
00:10:06 :qui va être idle donc ça veut dire qu'il ne bouge plus donc ça ça peut être un petit peu risquéle DOM content loaded c'est pareil à un moment le DOM donc le document object model va avoir finide charger mais là encore ça peut il peut y avoir des rechargements qui se font aussi donc là ça va
00:10:22 :être dans la gestion d'erreur moi je vais faire juste un wait for timeout de 500 secondes et onva voir si ça règle le problème là aussi je vais mettre un petit wait for timeout à la fin de 500secondes on pourrait varier un petit peu pour être un peu plus humain là encore ça c'est le genre de
00:10:35 :choses qui avec le scrapper de bright data vont être grandement fluidifié puisqu'il va imiter leplus possible le comportement humain pour également ne pas impacter les performances du site là pourl'instant on fait tout en local et on n'a pas mis vraiment de wait for timeout comme vous l'avez
00:10:50 :vu dans le reste du script donc ça va le plus vite possible dès qu'il voit que les éléments sontchargés playwright gère normalement plutôt bien tout ça en fait il va s'attendre quand il cliquesur quelque chose à ce que les éléments se tassent un peu donc à ce qu'il y ait moins d'activités et
00:11:03 :que tous les éléments sur lesquels on a cliqué soit visible mais des fois ça peut valoir lecoup de mettre des timeout comme ici pour attendre un petit peu et ne pas aller trop vite donc jevais relancer le script on va voir donc en relançant ici directement sans point de debug
00:11:16 :si ça fonctionne mieux cette fois ci on relance et ça semble bien ici on continue on modifie onpasse au mois suivant etc etc donc vous voyez avec les petits timeout ici ça semble fonctionnersans aucun problème et on récupère bien toutes les dates à chaque fois toutes les locations on
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.