Sauvegarder le HTML sur le disque
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Quand on fait du scrapping, on l'a vu, il faut éviter au maximum de faire des requêtes inutiles,des requêtes qui également prennent du temps à faire à chaque fois. Nous, on veut développer
00:00:08 :rapidement mais sans non plus surcharger le site sur lequel on va faire du scrapping. Pour ça,ce qu'on va mettre en place dans cette partie, c'est l'écriture du contenu de notre fichierHTML sur le disque pour pouvoir, lors de nos tests et notamment tous les tests qu'on va faire
00:00:22 :pour récupérer le contenu de la page, lire directement le fichier HTML depuis le disquepour que ce soit donc plus rapide à exécuter à chaque fois et pour éviter de faire des requêtesinutiles vers le site de Airbnb. Dans cette partie, on va rajouter deux fonctions, une fonction pour
00:00:36 :écrire le fichier HTML sur le disque et une fonction pour lire le contenu depuis le disque.Et on utilisera ensuite ces deux fonctions pour, au choix, écrire ou lire le fichier depuis ledisque. Ce que je vais faire également, c'est rajouter dans cette partie un logger pour qu'on
00:00:51 :puisse avoir un meilleur aperçu de ce qu'il se passe à l'intérieur de notre script quand onl'exécute. La première chose que je vais faire, c'est faire une variable qui va contenir le chemin
00:00:59 :vers le fichier HTML dans lequel on va écrire ou lire les informations. Pour ça, je vais utiliserla bibliothèque pathlib pour pouvoir faire un chemin relatif vers le dossier dans lequel setrouve mon script. Donc je vais faire une variable constante que je vais appeler filePath qui va être
00:01:14 :égale au chemin complet du fichier que je mets dans une classe path ici. Donc ça, ça va me créerun objet de type path qui va contenir le chemin complet vers le script main.py. Et moi, ce qui
00:01:25 :m'intéresse ici, ce n'est pas le chemin vers le main.py mais le chemin vers le dossier parent.Donc pour ça, je mets tout simplement .parent, ça va me retourner le dossier parent du fichier
00:01:34 :qu'on va lancer. Et ensuite, je vais faire un slash pour concaténer tout ça avec le nom du fichierque je vais appeler tout simplement rbnb.html. On va ensuite utiliser le module logging pour
00:01:44 :utiliser un logger. Donc je fais un import de logging ici et je vais faire un logger que je vaismettre dans une variable logger. Donc ça va être égal à logging.getLogger. Et pour le nom, on va
00:01:55 :passer le nom du script. Donc c'est quelque chose que vous allez retrouver dans nombre de scriptsici, d'utiliser directement cette variable name qui va être égale dans ce cas-ci au nom du fichier,donc dans ce cas-ci main.py. Et ça va donner donc un nom automatiquement à notre logger. Et pour
00:02:09 :finir, on va faire une configuration de base. Donc on ne va rien écrire dans un fichier ou quoi quece soit, on veut juste une configuration de base qui va écrire dans le terminal ce qu'il se passegrâce à notre logger. Donc on va faire une basic.config et on va mettre un niveau qui par
00:02:22 :défaut va être égal à logging.debug. On pourra par la suite changer si on veut faire par exempledes avertissements, donc warning, error, etc. Pour l'instant, on va le mettre sur debug et on a ainsi
00:02:32 :notre logger qui est configuré de façon très basique mais suffisante pour ce qu'on va avoirbesoin de faire pour l'instant. Donc qu'est-ce que je vais faire ici ? Je vais déjà commencer par
00:02:40 :faire une fonction writeToFile. Cette fonction, on ne va pas l'utiliser directement donc je vaismettre un tiré du bas ici pour que ce soit une fonction privée qui va être utilisée dansd'autres fonctions mais qui n'a pas vocation à être directement utilisée par quelqu'un quiutiliserait notre script. Donc je vais l'appeler writeToFile tout simplement et on va lui passer
00:02:57 :un paramètre content qui va être le contenu qu'on souhaite écrire à l'intérieur du fichier et enretour on va retourner un booléen qui va indiquer si oui ou non le fichier a été correctement crééet s'il existe sur le disque. Je vais mettre une docstring ici, on va mettre tout simplement
00:03:10 :writeContentToFile, pas besoin d'en dire plus c'est assez explicite comme cela. Ce qu'on vafaire ici c'est donc indiquer ce qu'il se passe avec notre logger donc on va faire un debug toutsimplement et on va dire writingContentToFile comme ça quand on va exécuter notre script on auracette indication dans le terminal qui nous dit qu'on est bien passé à l'intérieur de cette
00:03:27 :fonction et qu'on est en train d'écrire à l'intérieur du fichier. Pour l'écriture on vafaire quelque chose de très simple avec tout simplement l'ouverture du fichier qui est dansla variable filePath en mode write donc avec le w on va mettre ça dans une variable f et on va
00:03:40 :faire f.write et on va écrire le contenu que l'on passe ici à notre fonction. Et pour finir cequ'on va faire c'est retourner donc un booléen qui va être filePath.exist donc ça va vérifier
00:03:51 :en fait tout simplement si notre fichier existe sur le disque donc si c'est le cas ça veut direqu'il a été correctement créé et si ce n'est pas le cas et bien ça veut dire qu'il y a eu uneerreur. Donc voilà pour cette fonction writeToFile rien de bien compliqué ici et on va faire tout
00:04:03 :de suite la fonction readFromFile qui elle aussi va être assez facile. Donc readFromFile qui elleaussi n'aura pas vocation à être utilisée directement donc on va mettre un tiré du basau début et ça va nous retourner ici une chaîne de caractère qui va être le contenu du fichier.
00:04:18 :Donc je mets également une docstring ici readContentFromFile et on va mettre là encoreun logger.debug pour dire qu'on va lire le contenu du fichier. Le fichier quel est-il et bien c'est
00:04:29 :toujours notre filePath ici. Donc là encore je vais utiliser le context manager avec withOpenFilePathcette fois-ci en mode lecture donc avec read, R pour read et je vais mettre ça dans une variablef et je vais retourner tout simplement le contenu de ce fichier qui est bien donc une chaîne de
00:04:45 :caractère comme on l'a indiqué ici. Vous voyez ici qu'on passe directement par une constantefilePath, on pourrait rendre le script un peu plus flexible si on le souhaitait en mettantdirectement ce paramètre dans writeToFile et dans readFromFile pour pouvoir changer parexemple le nom et l'allocation de l'endroit où on écrit le fichier. Nous on va tout mettre à
00:05:02 :l'intérieur de ce dossier ici donc je préfère passer ici par un chemin relatif à partir dufichier du script et de ne pas laisser le choix sur le nom du fichier. On n'a pas beaucoup d'intérêt
00:05:11 :ici à laisser le choix à l'utilisateur ce qu'on veut c'est juste pouvoir écrire sur le disque etlire depuis le disque le nom du fichier on n'en a pas grand chose à faire. Donc voilà pour ces deux
00:05:19 :fonctions writeToFile et readFromFile et on va pouvoir donc les utiliser cette fois-ci àl'intérieur de notre FetchContent pour au choix aller chercher le contenu directement depuis lesite donc le contenu à jour directement depuis Airbnb ou alors le contenu depuis le fichierqu'on aura écrit préalablement sur le disque pour ne pas avoir à faire de requêtes inutiles.
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.