Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Alors dans cette partie on va coder la fonction qui va nous permettre de récupérer le prix d'unlivre donc ça va être cette fonction getBookPrice. On va commencer à ce niveau là directement dans
00:00:10 :le coeur donc on va s'amuser à récupérer le prix du livre et après on verra comment faire toute lalogique autour donc la logique avec le getAllBooksURL. On pourrait faire l'inverse bien sûr commencer
00:00:20 :par cette fonction là c'est vraiment à vous de voir moi dans ce cas ci je vais commencer par lafonction qui me permet de récupérer le prix d'un livre puisque ça c'est sûr qu'on va avoir besoinde le faire. Les autres là encore on va voir comment on va adapter notre script peut-être
00:00:33 :qu'on va penser en faisant ça à d'autres moyens de faire c'est pas encore forcément couler dans lebéton comme je le disais donc je préfère commencer par cette fonction qui là je le suis sûr va êtreabsolument essentielle puisqu'on peut pas récupérer le prix autrement qu'en allant sur la page du livre.
00:00:47 :On l'a vu la quantité en stock elle n'est pas disponible au niveau des pages ici des pages dusite il faut vraiment aller sur la page du livre. Donc je vais prendre le premier exemple là encore
00:00:57 :on va isoler les choses c'est à dire qu'on va prendre un exemple spécifique et par la suite onva faire de la gestion d'erreurs également pour voir si les éléments sont trouvés ou non et commeça quand on fera un scrapping sur tout le site si jamais il y a des erreurs si jamais par exemple
00:01:11 :sur une page on n'a pas la quantité en stock ou le prix ou quelque autre information dont on auraitbesoin et bien on va avoir une gestion efficace de ces erreurs pour en fonction de ce qu'onsouhaite soit afficher un message soit faire planter le script etc comme on l'avait vu dans
00:01:24 :les exercices précédents et bien faire une action qui va nous permettre de gérer cetteerreur correctement de la façon dont on le souhaite et non pas de subir cette erreur. Donc
00:01:33 :là je vais appeler cette fonction getbook price et dans l'url je vais lui donner l'url que jevais créer juste avant ici qui va correspondre à ce livre donc url égale à l'url que je viens dedéfinir. Donc dans getbook price qu'est ce qu'on va faire ici on va avoir une url et on va retourner
00:01:49 :un float donc il faut déjà bien entendu naviguer vers cette url avec le module request pour pouvoirrécupérer le html. Donc le module request je pense que je l'avais déjà importé et non en fait je
00:02:01 :l'avais pas encore importé donc on va l'importer ici après donc import request et ici à partir del'url donc on va faire un request.get vers cette url. Cette requête je vais tout de suite la mettre
00:02:12 :dans un bloc try except puisqu'on sait que les requêtes ça peut planter on peut avoir desproblèmes de réseau on peut avoir des erreurs 404 etc donc il y a plein de choses qui peuventarriver donc je vais récupérer cette requête dans un objet response et je vais faire un response.raise
00:02:26 :for status pour qu'on ait une erreur qui soit levée si jamais on n'a pas un code valide quinous est retourné comme un code 200. Donc là qu'est ce que je vais faire comme exception,
00:02:34 :l'exception qui est dans le module request qui est dans le sous module donc exception et quis'appelle request exception et je vais récupérer cette exception as e donc dans une variable quiva être e qui va me permettre de faire un log donc puisque les erreurs dans ce cas ci je veux
00:02:50 :les loguer dans mon fichier de log le fichier de log qu'on a créé ici donc avec logger.addbooks.logtoutes les erreurs qui sont de type warning, error ou critical on va les loguer dans ce fichier. Moi
00:03:01 :ce que je veux faire ici ce n'est pas donc arrêter le script là je vais vraiment adopter une logiquequi est que je veux vraiment aller au bout de mon cheminement je veux scraper l'entièreté du siteet ce script en fait je veux le lancer tous les jours par exemple pour récupérer la valeur totale
00:03:16 :et voir tous les jours combien ma librairie vaut en termes de stock donc par exemple on va dire300 000 euros le jour d'après on va avoir fait des ventes donc il restera plus qu'un total de298 000 euros par exemple dans la boutique et on aura fait 2000 euros de vente et on pourra voir
00:03:32 :comme ça l'évolution du prix total de notre boutique. Donc moi je veux vraiment qu'il n'y aitaucune erreur parce que imaginez que ça plante au milieu et que là du coup on nous dise le prixde la librairie c'est 150 000 parce que ça n'a pas réussi à faire tout le scrapping là ça serait
00:03:47 :un problème et par contre quand on a des erreurs on veut les régler donc s'il y a un moment unepage qui ne contient pas la quantité en stock ou qui ne contient pas le prix bah c'est un problèmeaussi mais on va l'adresser différemment c'est à dire qu'on va mettre cette erreur dans un fichier
00:03:59 :de log et ensuite on va avoir une personne dans la librairie par exemple qui pourra vérifier quipourra être averti avec des outils comme Sentry par exemple qui pourrait vérifier avec ses loggerset envoyer une alerte quand on a une erreur pour que l'erreur soit réglée plutôt que de faire
00:04:15 :penser que en fait le script a correctement fonctionné alors que ce n'est pas le cas. Donclà on gère cette erreur s'il y a une erreur dans ce cas ci qu'est ce que c'est c'est une erreur quiva se passer lors de la requête donc on va faire tout simplement un logger.error et on va dire
00:04:29 :erreur lors de la requête donc je vais mettre erreur lors de la requête HTTP et je vais insérerà la fin l'erreur donc je vais mettre des accolades ici j'ai fait une fstring au début pour insérer cemessage parce que là on ne va pas faire un raise on ne va pas arrêter le script comme je viens de
00:04:45 :le dire on va continuer donc qu'est ce qu'on va faire ici dans ce cas ci on va juste retourner0 donc on va retourner 0.0 parce que là ici on est avec un retour qui est un float et on ne veut
00:04:53 :pas retourner un autre élément puisque le prix du livre ici si vous vous souvenez bien dans cettefonction main on va l'utiliser on va l'ajouter en fait dans cette liste de prix totaux et on vafaire la somme à la fin donc si on se retrouve avec un objet none ou un false ou quelque chose
00:05:07 :d'autre et bien ça va l'encore planter donc ce qu'on veut faire c'est pas que ça plante on veutjuste retourner une information qui va être valide mais qui ne va pas fausser le résultat donc c'estjuste que voilà on va dire que ce prix là il vaut 0 parce qu'il y a une erreur sur le site. Donc ça
00:05:20 :déjà ça nous permet de gérer les problèmes qu'on pourrait avoir avec raise for status et ensuite onva créer donc notre objet html parser à partir de response.txt et je vais stocker ça dans une
00:05:30 :variable que je vais appeler tree et que je vais passer du coup à mes autres fonctions ici donc làon revient au sujet qu'on avait vu précédemment à savoir que là je ne veux pas passer l'url pourrecréer un objet html parser à chaque fois je veux le faire juste une fois ici et ensuite passer
00:05:44 :cet objet à mes fonctions d'extraction qui vont à partir de cet objet donc à partir de l'objethtml parser extraire les informations de prix et de stock et ensuite ici bah qu'est ce qu'on vafaire tout simplement multiplier l'un par l'autre donc je vais dire price égal extract price from
00:05:58 :page on va passer le tree et là je vais dire stock égal extract stock quantity from page eton va lui passer le tree également et au final on va faire un price fois stock tout simplement etc'est à l'intérieur ensuite de ces fonctions qu'on va gérer les erreurs potentielles qu'il pourrait
00:06:14 :y avoir lors de l'extraction on va pas faire un try except ici on va le faire directement àl'intérieur de ces fonctions. Donc on va rentrer maintenant dans cette fonction on rentre encore
00:06:22 :plus dans le coeur du sujet je vais déjà peut-être faire un test pour voir qu'on arrive bien ici doncje vais mettre un point de debug et vérifier qu'on arrive bien au moins jusqu'à ici jusqu'à larécupération du tree donc de l'objet tree je lance en mode debug et on espère qu'on se rende jusque
00:06:37 :là et voilà donc on a bien un response de 200 donc la requête a été correctement effectuée et on aici notre objet tree qu'on va pouvoir inspecter pour récupérer le prix donc j'enlève mon point dedebug je reviens ici extract price from page et là donc qu'est ce qu'on a ici on a le prix qui est
00:06:52 :à un seul endroit je pense sur la page je vais faire un ctrl f et ah non il est aussi ici donclà on a plusieurs possibilités donc je vais regarder qu'est ce qui est le plus simple on vafaire un clic droit inspect et on va vérifier avec notre petit élément donc on peut cliquer sur cet
00:07:06 :élément ici pour naviguer dans la page donc là on a le p avec le price color qui est un nom de classeassez spécifique je vais vérifier avec un ctrl f s'il apparaît ailleurs et non il est unique doncun sur un donc ça c'est déjà pas mal je pense qu'on n'a pas besoin d'aller plus loin je vais
00:07:20 :aller voir quand même ici et là effectivement on a des td donc on a le prix sans la taxe et le prixavec la taxe donc nous dans notre cas on va garder le prix le prix qu'on a ici qui va inclure lestaxes on veut pas rentrer trop dans le détail avec les là en plus la taxe est de 0 donc on va
00:07:34 :juste garder le prix d'origine et ici comme on a des td sans rien sans classe c'est peut-être unpeu plus compliqué à aller chercher alors que là on a un p avec une classe price color qui est uniquedonc ça me plaît bien on va partir là dessus pour récupérer le prix donc là pour récupérer cet
00:07:50 :élément on va utiliser notre object tree et on va utiliser la fonction css et dans ce cas ci lafonction css first parce que css nous retournerait en fait une multitude d'informations donc mêmesi on n'a qu'un seul élément sur la page il va nous retourner une liste alors que css first va
00:08:05 :nous retourner seulement un élément donc le premier élément qui trouve s'il y en a plusieurs ou là dansce cas ci comme l'élément est unique et bien on n'aura que cet élément de retourner de toute façondonc là qu'est ce qu'on va voir un paragraphe avec une classe donc on met la balise p et tout
00:08:18 :de suite après on met le point pour la classe et là c'est price color si je me souviens bien jecrois que je l'avais dans mon oui voilà dans mon presse-papier donc price color et on va récupérerça dans une variable que je vais appeler price node et là encore on va pas aller plus loin je vais
00:08:32 :juste faire un print de price node et je vais lancer le script et là vous voyez alors on a ouiun problème parce que j'ai déjà fait la multiplication donc là dans mon extract quantityje vais juste retourner directement pour l'instant je vais faire un return de 1 et là on va mettre
00:08:48 :un return de 1 aussi donc comme ça ça nous fait un return de base qui fait qu'on n'a pas besoind'enlever cette ligne je peux aussi commenter cette ligne tout simplement et enlever lesreturns là c'est à vous de voir ce que vous préférez je pense que je vais faire ça comme ça
00:09:00 :donc je relance le script et là j'ai bien un node p qui est visible donc ça semble bon je peuxfaire un print de cet élément point texte et là si on lance le script on a bien le texte avecl'information donc 51.77 donc c'est ce dont on avait besoin et là il va rester un petit truc
00:09:17 :à faire c'est à dire on va devoir en fait extraire tout sauf l'élément qu'on a ici alors là encoreje vais faire un clic droit pour voir comment sous quelle forme est cet élément et là on a justevoilà le symbole de livre de pound et ensuite le nombre donc là on va être obligé de faire
00:09:32 :l'extraction de texte on va pas pouvoir récupérer uniquement ça si par exemple on avait un spanà l'intérieur de ce p ou quelque chose du genre avec une autre classe qui engloberait uniquementle prix ça pourrait être faisable comme ça mais là ce n'est pas le cas donc ce que je vais faire
00:09:46 :c'est utiliser mon outil préféré pour ça que tout le monde déteste c'est à dire les regex doncje vais l'importer au dessus dans les librairies qui sont dans la librairie standard donc iciimport re et on va utiliser ça pour aller chercher les informations dont on a besoin donc avant de
00:10:03 :partir dans la regex je vais déjà récupérer donc ce texte qu'on vient de faire avec un print saufque là je vais le mettre dans une variable et je vais commencer dans ce cas ci pas avec un tryexcept cette fois ci on va faire un lbyl look before you leap on va vérifier est ce qu'on a
00:10:17 :un price node donc on va dire if price node donc si cet objet contient quelque chose donc ça veutdire qu'on a trouvé cet élément sur la page et on va pouvoir récupérer le texte même si le textelui ne contient rien et auquel cas on aurait un autre problème là ce que je veux c'est juste
00:10:32 :savoir est ce que cet élément est trouvé sur la page oui ou non et donc si c'est le cas et bienon va récupérer ça dans une variable qu'on va appeler price string par exemple et si on n'a pascet élément donc ça veut dire qu'il n'a pas été trouvé sur la page dans ce cas ci on va faire tout
00:10:44 :simplement un loggeur point erreur et indiquer aucun noeud contenant le prix n'a été trouvédonc noeud c'est le mot français pour node qui est la façon dont on appelle ces éléments quisont sur la page et là qu'est ce que je vais faire ici et bien tout simplement retourner
00:10:59 :encore une fois un 0.0 parce que je ne veux pas comme on l'a vu arrêter le script empêcher lescript de continuer c'est ce que j'ai choisi ici je retourne 0 on considère qu'il y a eu unproblème avec le prix sur la page donc on le log on le met dans notre fichier de log mais on continue
00:11:15 :le script en retournant des informations valides pour continuer le script donc quand on n'a pasle prix on le log et on considère que le livre a un prix qui est égal à 0 et on fera 0 fois laquantité peu importe la quantité on aura un prix de 0 au final donc ensuite qu'est ce que je vais
00:11:28 :faire et bien je vais faire cette fameuse regex qui va me permettre de récupérer seulement lesinformations de nombre et le point donc bien important ici parce que si je prends juste lesnombres on va se retrouver avec 5177 ici moi je veux bien garder le point donc je vais déjà faire
00:11:41 :ma regex donc je vais faire une regex avec le R les guillemets ici on va récupérer donc une suitede caractères donc qui vont être dans ce cas ci des nombres entre 0 et 9 donc je vais mettre unensemble ici 0-9 ça va correspondre à tous les nombres de 0 à 9 0 et 9 inclus et l'autre
00:11:58 :caractère qu'on va vouloir cibler c'est le point donc je le mets à la suite un point ici comme çadonc là je cherche tous les nombres de 0 à 9 et éventuellement un point et je vais mettre unplus ici plus ça veut dire 1 jusqu'à l'infini et c'est pour ça que j'ai mis ici les crochets
00:12:13 :donc je cherche ces éléments donc soit 0 soit 1 soit 2 etc jusqu'à 9 soit un point et ça au moinsune fois ou plus donc ça veut dire qu'on peut avoir par exemple 100 ça va marcher on aura 1 0 0c'est valide c'est contenu dans l'ensemble et on l'a au moins une fois dans ce cas ci avec 100 on
00:12:29 :leur a trois fois on aurait trois nombres comme ça là dans ce cas ci j'ai 51.77 le premier élémentici le symbole de livre sterling il n'est pas dans cet ensemble donc il ne sera pas trouvé ledeuxième élément le 5 il est dans l'ensemble le 1 aussi le point aussi le 7 le 7 etc et on en a 4
00:12:45 :donc on en a au moins un jusqu'à l'infini on pourrait avoir un prix qui va jusqu'à des milliardsde milliards et ça serait valide également donc voilà ma regex que je vais utiliser et pourrécupérer cette information on va faire un re.findall pour trouver toutes les occurrences qu'on
00:12:59 :va avoir dans cette chaîne de caractère qu'on va lui passer qui va être dans ce cas ci le pricestring qu'on a récupéré auparavant donc on récupère ce price string si on arrive ici c'est qu'il estcorrectement défini puisqu'on va être passé dans le if sinon on aura fait un return et ce que je
00:13:14 :vais faire c'est récupérer le premier élément s'il existe donc avec un crochet 0 puisque si ontrouve quelque chose ici on va avoir une liste avec toutes les occurrences qui ont été trouvéespuisque find all ça va trouver toutes les occurrences et donc moi ce que je veux c'est
00:13:26 :récupérer la première puisque je veux pas une liste je veux vraiment la valeur sous forme dechaîne de caractère de cet élément que j'ai trouvé qui va être le premier dans cette chaînede caractère et qui sera donc le prix là vous vous doutez bien que si on ne trouve pas l'élément
00:13:39 :on va avoir potentiellement une erreur et cette erreur vous l'aurez compris ça va être uneerreur de d'index et cette erreur on va la provoquer pour être sûr que c'est la bonnemais par habitude c'est une erreur d'index puisque ici en fait on va avoir une liste et donc quand
00:13:52 :on essaie de récupérer un élément dans une liste qui n'existe pas si la liste est vide et qu'onessaie de récupérer le premier élément et bien on aura une erreur de type index erreur donc jevais déjà faire mon bloc try except et on va essayer de faire planter tout ça pour voir si on
00:14:04 :arrive bien à récupérer notre erreur donc moi comme je vous dis par habitude je sais que c'estune erreur de type index erreur mais on va la provoquer quand même pour vérifier que c'estbien ça donc là je vais faire un logger là encore une fois on log notre erreur on va dire aucun
00:14:16 :nombre n'a été trouvé et on va récupérer l'erreur ici donc as e et on va le mettre àl'intérieur de cette chaîne de caractère donc comme on l'a fait pour les autres erreurs eton va retourner ici dans ce cas ci encore une fois 0.0 et si c'est pas le cas si on a bien
00:14:31 :réussi à récupérer quelque chose on va le retourner donc on va retourner le prix qu'ona trouvé dans un else le else va être exécuté si le try a été réussi et qu'est ce qu'on varetourner on va retourner le prix qu'on aura récupéré auparavant dans cette variable et
00:14:45 :on va le retourner donc ici avec un return. Dernière chose à faire c'est de convertir cetteinformation en float puisque là on aura une chaîne de caractère donc je fais un return de float deprice je pourrais refaire un try except ici pour vérifier que la conversion fonctionne bien là
00:15:00 :normalement si ma reject c'est bonne je ne peux pas avoir autre chose qu'un float on pourraitavoir des cas de figure où on pourrait vérifier est ce qu'on a un point ou une virgule et deschoses comme ça là on va pas rentrer trop dans le détail sinon cette formation ne finira jamais
00:15:11 :mais voilà il faut pas non plus être complètement fou là je vais faire un float directement maissachez que si on voulait vraiment vraiment être sûr on pourrait aussi vérifier cette ligne pours'assurer en fait au préalable que ce soit avec un try except ou avec un if s'assurer qu'on peut
00:15:25 :convertir cet objet en float donc là je vais le retourner comme ça et comme je vous dis on vavolontairement faire planter le script donc là c'est à dire que je vais faire un price stringici qui va être égal à quelque chose qui ne va pas fonctionner donc là par exemple je vais
00:15:37 :mettre abcd donc là dans ce abcd on ne va pas trouver quoi que ce soit qui correspond à cettereject à savoir des nombres des points au moins une fois et donc là on aura une liste vide etnormalement ça va planter donc je relance le script et on vérifie et là on a bien notre
00:15:50 :erreur qui est logée correctement dans notre terminal avec extract price from donc erreur àla ligne 84 c'est bien effectivement à cette ligne là qu'on a le loggeur aucun nombre n'a été trouvélist index out of range donc vous voyez que ça a bien fonctionné là si j'avais mis un value
00:16:05 :error par exemple à la place je relance là vous voyez on n'a on n'a pas réussi à récupérer cetteerreur donc on a l'erreur complète avec le index error et on n'a pas notre message de loggeurpuisque ici ce n'est pas une erreur de type value error mais bien de type index error donc vous
00:16:19 :voyez n'hésitez pas à provoquer les erreurs comme ça pour vérifier de quel type elles sont et ensuitebien gérer cette erreur de la façon dont vous le souhaitez à l'intérieur de ce bloc except doncnormalement c'est bon on va faire un print de float price pour vérifier que tout est bon ici et on a
00:16:33 :bien 51.77 donc ça fonctionne parfaitement j'ai juste vérifié avant de terminer cette fonctionque on a bien le else qui va être correctement exécuté donc là à la place d'un p je vaismettre un div et on va lancer et là on voit bien qu'on a de nouveau cette erreur avec aucun noeud
00:16:48 :contenant le prix n'a été trouvé donc on arrive bien avec cette erreur ici à la ligne 77 d'ailleurssi je veux voir dans mon fichier de log normalement dans le books.log on voit ces deux erreurs que
00:16:56 :j'ai eu également avec la date l'heure et le type d'erreur le ligne la ligne etc donc ça va mepermettre comme je vous disais de bien voir de bien faire le suivi des problèmes qu'on pourraitavoir dans notre script donc je vais replacer le p ici et maintenant on va s'attaquer à la
00:17:09 :fonction qui va extraire les quantités donc ça va être assez similaire comme je vous l'avais ditpeut-être qu'on va même pouvoir faire une seule fonction avec ça mais là je vais récupérer doncà partir de mon arbre avec la méthode css first ce que je recherche dans la page puisque on va
00:17:23 :en avoir un seul donc je reviens ici on va faire un clic droit inspect sur cette donnée in stockavailability et là on a le in stock avec 22 available et je crois que je l'avais vu égalementici availability donc on va faire un inspect aussi sur cette partie là et là de la même façon on se
00:17:40 :retrouve avec un td t body td donc ça pourrait être une autre façon de faire moi je pense queje vais préférer encore une fois cet élément là avec une classe bien spécifique donc in stockavailability donc in stock ça veut dire qu'il est en stock si on trouve pas cet élément ça veut dire
00:17:55 :que probablement en fait le livre n'est pas en stock donc moi je vais cibler cet élément commeje vous dis ça va être assez similaire donc je vais aller peut-être un petit peu plus vite onva récupérer ici donc le stock on va l'appeler stock node égal à ça ça va être alors je crois
00:18:10 :que c'est un p ou un div je sais plus j'ai oublié c'est un p aussi donc p in stock availability etlà on a deux classes donc in stock et availability donc là on cherche à avoir à la fois cette classeet également cette classe sur notre p et ensuite ce que je vais faire c'est là encore une regex
00:18:28 :puisqu'on va vouloir extraire ce nombre à l'intérieur de cette chaîne de caractère donclà encore on pourrait utiliser find all on peut aussi utiliser r.sub pour enlever tout ce qui n'est
00:18:36 :pas un nombre à l'intérieur de cette chaîne de caractère là pour garder une cohérence avecl'autre fonction je vais utiliser find all également donc ici je vais faire un re.findall
00:18:48 :et dans ce cas ci on n'a pas le point puisque on peut pas avoir comme on l'a dit un demi livre enstock donc ça va être des nombres entiers donc la regex va être plus simple ça va être toutsimplement slash d avec un plus donc avec le slash d qui définit n'importe quel nombre de 0 à 9 là
00:19:03 :encore on pourrait remplacer aussi et mettre les crochets comme on l'avait vu avec 0-9 çamarcherait également et là j'ai effacé le guillemet donc ça aussi ça marche à vous de voir ce que vouspréférez moi je vais préférer le slash d si vous voulez une bonne référence de tout ce que vous
00:19:18 :pouvez utiliser vous avez regex 101 si je descends ça doit être je vais vous afficher ici on a leslash d qui doit être quelque part là voilà slash d any digit vous voyez donc à vous de voir soit vousspécifiez très précisément ce que vous voulez avoir donc des nombres de 0 à 9 ou le slash d ça
00:19:35 :va être exactement la même chose donc qu'est ce que je vais aller chercher ici on va voir le stocknode et là on va faire un try except on va faire tout un peu dans le même bloc et on va gérer lesdifférentes cas de figure avec différents blocs except je pense dans ce cas ci je vais vous montrer
00:19:51 :là encore une autre façon de faire donc ce qu'on va faire c'est récupérer le point texte à partirde ce stock node et le find all donc ça va nous retourner encore une fois une liste donc on varécupérer le premier élément de la liste et et voilà et on va convertir tout ça en nombre
00:20:05 :entier parce qu'encore une fois on va avoir une chaîne de caractère donc il faut la convertiron va faire la même chose qu'ici je vais gérer plusieurs cas de figure mais pas le dernier casde figure qui est la conversion en int parce que je considère que si je suis arrivé jusqu'ici ça
00:20:17 :veut dire que j'ai vraiment un nombre puisque on aura extrait tous les nombres de la chaîne decaractère avec le slash d donc je vais pas gérer cette potentielle erreur avec le int par contre ona deux autres erreurs qui peuvent arriver ici qu'on avait géré également dans cette fonction donc la
00:20:30 :première erreur c'est la possibilité qu'on ne trouve pas de noeud sur la page avec ce sélecteurcss la deuxième erreur c'est que même si on trouve un texte qu'on n'arrive pas à trouver lesnombres donc imaginez qu'on est juste in stock mais qu'on n'est pas le 22 dans le nombre et bien
00:20:44 :on pourrait pas récupérer ici les nombres qui n'existent pas dans le find all donc là on a deuxerreurs on a une première erreur qui serait que là par exemple stocknode serait égal à none donclà si on a un objet none parce qu'on n'a rien trouvé ici dans ce cas ci c'est une erreur de
00:20:57 :type attribute error ça veut dire que l'attribut texte sur l'objet none il n'existe pas donc làce que je vais faire c'est remettre mon stocknode et faire un try except donc try on essaye toutça et si ça marche on va mettre un return d'ailleurs on va retourner tout ça et except
00:21:12 :donc on va gérer la première erreur avec une attribute error as e et on va dire ici toutsimplement logger.error encore une fois on va dire aucun noeud aucun noeud comme ça et on va mettre
00:21:24 :le nom du noeud donc p in stock availability hop n'a été trouvé sur la page tout simplement n'aété trouvé sur la page avec un point à la fin et qu'est ce qu'on va faire ici encore une foiscontinuer avec le bon déroulement du script en retournant 0 pour pouvoir multiplier par 0 du coup
00:21:41 :le prix qu'on aura trouvé donc même si on a un prix ici qui est valide si on n'a pas réussi àtrouver les stocks on considère qu'il y en a 0 on pourrait considérer qu'il y en a un mais jepréfère considérer qu'il y a 0 et juste après laisser les personnes ne pas fausser les prix
00:21:54 :parce que s'il n'y a pas de stock affiché c'est probablement qu'il y a une erreur quelque partet qu'on n'a peut-être pas le livre donc je vais laisser après la personne gérer le problème avecle fichier de log et on va retourner 0 et je vais mettre également ici hop avec un fstring l'erreur
00:22:11 :qu'on a à l'intérieur de ma chaîne de caractère et l'autre erreur qu'on peut avoir c'est un indexerreur donc comme on l'avait vu ici avec le prix c'est à dire qu'on peut essayer de récupérerl'index 0 sur une liste qui est vide et donc encore une fois ça ne fonctionnera pas donc
00:22:24 :la loggeur.error de nouveau et on va dire aucun nombre n'a été trouvé dans le noeud toutsimplement et on fait un return de 0 de nouveau. Donc normalement on a tous les cas de figure que
00:22:36 :je vois qui ont été gérés, le cas de l'attribute error, le cas du index error, on va mettre leE ici aussi hop avec notre fstring avec un 2 points comme ceci et avec un 2 points ici aussipour qu'on sépare bien les deux. Donc là encore je vais tester quand même tout ça en provoquant
00:22:53 :des erreurs donc je vais mettre un S par exemple ici pour fausser les données je lance et on abien une erreur à la ligne 100 donc ligne 100 aucun noeud painstakingavailability n'a été trouvédonc c'est parfait si on trouve ce noeud mais qu'ensuite donc là encore je vais fausser les
00:23:08 :choses je vais mettre ici à la place de ça je vais mettre une chaîne de caractère et on vamettre abcd je relance et là on se retrouve bien avec voilà aucun nombre n'a été trouvé dans lenoeud donc ça fonctionne de la même façon et je pense que c'est tout je pense que c'est tout
00:23:22 :on a le int et on va pouvoir tester normalement j'ai tout ce qu'il faut j'ai laissé mon returnalors non je l'avais commenté on va le remettre le return de price fois stock et je croise lesdoigts je vais lancer mais normalement ça devrait être bon je pense qu'on a tout alors je n'ai pas
00:23:37 :fait print pour vérifier ce qu'on a à la fin je vais faire un print de cet appel de fonction etlà on a 1138.94 donc si je fais 51.77x22 c'est bien la bonne valeur 1138.94 donc ça fonctionne on
00:23:54 :a bien le prix du livre en multipliant le prix par la quantité donc vous voyez qu'on a pas mal dechoses ici encore une fois quand on fait de la gestion d'erreur quand on met les loggers etc çafait beaucoup de code pour peu de choses à la fin on pourrait mettre juste deux lignes de code voir
00:24:07 :une ici on pourrait tout faire sur une ligne même mais ce ne serait pas bien gérer les erreurs et sijamais il y avait un problème sur la page comme on l'a vu et bien soit personne ne se rendraitcompte parce qu'on ferait un try except par exemple trop large soit en fait le script planterait à la
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.