Récupérer le HTML depuis le disque
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans notre fonction FetchContent, ici, on va toujours récupérer le contenu à partir d'internet,donc à partir de l'URL de Airbnb qu'on paste au module Request. Dans cette partie,
00:00:11 :on va donc modifier cette fonction FetchContent pour aller chercher au choix le contenu depuisinternet avec Request ou depuis le disque avec le fichier HTML qu'on aura écrit au préalable avecles fonctions WriteToFile et ReadFromFile pour dans ce cas-ci lire depuis le fichier sur le disque.
00:00:28 :La première chose qu'on va faire, c'est modifier un petit peu ces deux lignes de code pour lesrendre un peu plus robustes en utilisant un try-except afin de récupérer les erreurspotentielles qu'il pourrait y avoir avec notre requête et afin de vérifier également si notrerequête est correctement effectuée. Donc, je vais faire un bloc try ici dans lequel je vais mettre
00:00:46 :ces deux informations et un bloc except dans lequel on va mettre une exception que l'on n'apas encore importée qui va être à partir du module Request. Donc, on va faire from request.exceptions
00:00:57 :import request exception comme ceci et on va mettre cette exception ici dans notre bloc except.Donc, except request exception as e donc on va récupérer cette exception dans une variable qu'onva appeler e et là on va faire tout simplement un logger.error pour indiquer quel est le problème
00:01:14 :qui va se passer ici. Donc, on va dire tout simplement coudn't fetch content from et on vainsérer ici l'URL à partir de laquelle on a fait la requête et on va dire que c'est dû à l'erreuret là encore on va insérer avec des accolades l'erreur en question qu'on aura converti en chaîne
00:01:28 :de caractère pour pouvoir l'insérer à l'intérieur de cette chaîne de caractère et là on va leverl'erreur qui nous a été retournée dans la variable e avec rate. Donc, de cette façon si jamais on a
00:01:37 :la moindre erreur qui arrive à l'intérieur de ce bloc et bien on va pouvoir le logger avec notrelogger ici pour informer dans un fichier de log ou directement comme on va le faire ici dansnotre terminal qu'il y a eu une erreur avec la requête. A l'intérieur du bloc try on va là
00:01:51 :encore utiliser notre logger mais cette fois-ci pour dire qu'on va faire une requête donc on vadire making request to et on va insérer ici l'URL vers la requête. Ensuite on touche pas à cette
00:02:01 :ligne on va faire la requête avec request.get et ce qu'on va faire ici par contre c'est un raisefor status et ça ce que ça va faire si on va voir la définition de cette fonction avec commande bou si vous faites clic droit et que vous allez dans si je me souviens bien goto ici ensuite vous
00:02:17 :allez dans declaration or usage vous allez voir ici dans cette définition qu'on va en fait leverune erreur et indiquer quelle est cette erreur si jamais on a un code de statut donc status codeici qui est un code d'erreur donc par exemple entre 400 et 500 ou 500 et 600 donc nous ce qui
00:02:31 :nous intéresse ici c'est d'avoir un code qui est entre 200 et 299 un code de statut de succès sijamais ce n'est pas le cas et bien on va récupérer cette exception et logger là encore une fois qu'ona eu un problème lors de la récupération du contenu de cette page. Qu'est ce qu'on va faire
00:02:47 :ensuite une fois qu'on a récupéré la requête une fois qu'elle a correctement été effectuée doncaprès ce raise for status et bien on va l'écrire dans le fichier avec notre fonction write to fileet pour le content et bien on va mettre une variable que je vais créer juste avant je vais
00:03:01 :appeler html content qui va contenir response.txt donc je vais la donner au contenu ici html contentet on va retourner ce html content puisque c'est ce qu'on retournait auparavant dans la fonctionavec return response.txt directement là on retourne notre variable puisqu'on a besoin pour
00:03:18 :la passer ici on pourrait mettre response.txt ici et ici ça marcherait également mais là pour nepas répéter le code je préfère faire une variable intermédiaire et on retourne bien ici donc unechaîne de caractère comme indiqué par notre annotation de type dans la définition de lafonction. Donc là qu'est ce qui se passe jusqu'à présent on a tout simplement rajouté la gestion
00:03:35 :d'erreur et également l'écriture sur le disque du contenu de la page html en cas de succès cequi va nous permettre ensuite de donner le choix à l'utilisateur de lire le contenu depuis le disqueou depuis la requête qui va être effectuée vers Airbnb. Donc je vais rajouter ici une condition
00:03:52 :avec un paramètre dans cette fonction qui va me permettre de récupérer le contenu depuis le disquedonc on va dire tout simplement from disque qui va être de type booléen et qui par défaut va êtreégal à false et on va dire que si on choisit de récupérer from disque et également on va vérifier
00:04:07 :que filePath existe puisque ce n'est pas tout de vouloir récupérer les informations depuis le disquemais il faut aussi s'assurer que l'information existe déjà. Donc si on souhaite récupérer depuis
00:04:16 :le disque donc si ce paramètre est true et que le fichier existe et bien dans ce cas ci on va toutsimplement retourner le contenu depuis le fichier avec notre fonction readFromFile. Qu'est ce qu'elle
00:04:25 :fait et bien elle fait tout simplement un f.read de notre fichier qui est dans la variable filePath.Donc ça c'est si le fichier existe s'il n'existe pas et bien tout simplement on ira faire cetterequête ici pour récupérer le contenu depuis le module request donc avec cette requête .get ici.
00:04:42 :Et avec le logger on va bien voir tout ce qui se passe ici puisque c'est bien important là avecle logger d'afficher ce qui se passe. Si quelqu'un lance le script pour la première fois en mettant
00:04:51 :from disque il aura bien comme information le fait qu'on va quand même faire la requête puisqu'on amis un logger ici. Si par contre le fichier existe déjà puisque dans le readFromFile on a bien mis
00:05:01 :readContentFromFile on verra bien qu'on ne fait pas de requête et qu'au contraire on va directementlire le contenu depuis le fichier. Si on fait la requête on aura là encore le logger.debug qui va
00:05:10 :nous indiquer qu'on fait une requête vers l'url. Donc je vais pouvoir tester tout ça pour vérifierque ça fonctionne bien. Je vais avoir mon seul point d'entrée ici qui va être FetchContent donc
00:05:19 :comme je vous ai dit on ne va pas utiliser readFromFile ou writeToFile directement. Notreseul point d'entrée dans ce cas ci ça va être le FetchContent et on va lui dire avec l'url et lefrom disk comment on souhaite récupérer le contenu. Donc pour l'instant je vais mettre
00:05:31 :from disk et on va commencer à le mettre à true et je vais mettre ici content et on va faire unprint de content à la fin. Donc là normalement le fichier n'existe pas encore et vous allez voir
00:05:41 :avec le logger que même si on met from disk égal à true on va quand même faire la requête dans cecas ci. Donc je vais lancer mon script et on a bien le contenu qui est affiché puisqu'on a fait un
00:05:50 :print du contenu. Si on remonte alors là on ne voit pas, on n'a plus l'historique. Je vais enleverle contenu et je vais relancer et je vais supprimer le fichier puisque là vous voyez qu'il a étécorrectement créé et sauvegardé sur le disque comme c'était prévu. Donc je vais supprimer ce
00:06:02 :fichier ok et je vais relancer le script sans le print pour qu'on voit bien. Alors je confirme ledoRefactor, je vais relancer pour qu'on voit bien cette fois ci le debug. Donc là vous voyez qu'on
00:06:12 :a le debug de notre main et on a également le debug de urllib. Donc le debug on fait une requêtevers Airbnb et ensuite on écrit le content donc le contenu du fichier sur le disque. Et on va refaire
00:06:25 :cette fois ci donc de nouveau je relance le script sauf que cette fois ci vous voyez qu'on a juste lereading content from file et vous voyez par la même occasion que ça va beaucoup plus vite cettefois ci. Si jamais je souhaite quand même faire une requête donc je peux mettre from disk égal
00:06:37 :false, je peux même omettre de mettre cet argument puisque par défaut si je veux voir la définitionje l'ai mis à false. Donc par défaut on va aller récupérer le contenu depuis internet. Donc là si
00:06:47 :je fais ça même si j'ai le fichier sur disque, si je relance le script là on voit qu'on fait bienla requête pour aller récupérer les données à jour depuis le site internet. Donc voilà pour cette
00:06:56 :partie dans laquelle on a grandement amélioré notre script avec une gestion des erreurs quinous permet de savoir si quelque chose ne fonctionne pas. Je peux vous montrer par exemple
00:07:05 :ici si je mets autre chose on va mettre point et on va mettre un nom de domaine ici quin'existe pas. Donc là vous voyez qu'on a bien une erreur et si je remonte ici on va voir le
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.