Récupérer toutes les URL de la librairie
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :On va s'attaquer à cette dernière fonction dans laquelle on va parcourir toutes les pages pourrécupérer toutes les URL des livres sur toutes les pages à partir de l'URL de base qui sera donccette base URL. Donc ce que je vais faire c'est commencer par faire une liste vide qui pour
00:00:14 :l'instant ne va rien contenir mais on va la remplir avec toutes les URLs qu'on aura trouvé sur chaquepage au fur et à mesure. Ce que je vais faire moi ici c'est une boucle while. Alors on pourrait
00:00:23 :faire de différentes façons, là je pense qu'une boucle while c'est pas mal et comme on ne saità l'avance combien de pages on va avoir, on va faire tout simplement une boucle while true eton va s'arrêter quand on ne trouvera plus de prochaines pages. Donc c'est à dire qu'on va
00:00:36 :récupérer l'URL de la prochaine page et comme on l'a vu quand on a fait cette fonction getNextPageURLça peut retourner soit un string soit un none. Donc si on fait une vérification, on va faire
00:00:46 :un truc du genre if getNextPageURL et ou plutôt if not, donc if not getNextPageURL et bien làon fera un break pour sortir de notre boucle true et ne plus continuer tout simplement notre boucle.
00:00:59 :Donc qu'est ce qu'on va faire ici ? On va faire une requête, donc je vais faire request.getvers notre URL, on va récupérer ça dans un objet response, on va refaire un response.raiseForStatus
00:01:10 :et on va gérer les erreurs de requêtes potentielles avec un tryexcept. On va faire uneexception, vous commencez à connaître la chanson sur request.exception.requestExceptionAsEet on va dire que s'il y a un problème et bien on a une erreur, donc erreur lors de la requête HTTPsur la page et là on va mettre l'URL de la page en question et on va mettre notre erreur à la fin
00:01:32 :ici comme ça et on va faire un f. Et qu'est ce qu'on va faire ici ? Alors est-ce qu'on arrête ? Nonon va faire un continue dans ce cas-ci parce qu'on est avec notre boucle while. Donc là l'idée c'est
00:01:41 :que si sur une page spécifique à un moment on n'arrive pas à récupérer le résultat de larequête, donc si on a une page 404 ou une erreur de ce genre, et bien on va tout simplement continuerà la prochaine page, là encore mettre dans notre log que il y a eu un problème sur la page à
00:01:57 :cette URL précise, donc on pourra avec cette information savoir précisément quelle est lapage qui pose problème et voilà. Et on va juste continuer avec notre scrapping pour ne pas
00:02:06 :l'interrompre. Donc une fois qu'on a fait notre tryexcept, on va faire un HTML parser pour récupérerle contenu puisqu'on en a besoin pour nos autres fonctions, pour notamment cette fonction et cettefonction. Donc on va le faire une fois comme je vous disais ici et ensuite passer cet objet à
00:02:20 :ses fonctions pour ne pas le recréer. Donc je vais faire un response.txt ici et on va récupérerdonc les URL de tous les livres, donc books.urls qui va être égal à get all books.urls on page.
00:02:31 :Là je vais lui passer notre arbre et on va ajouter ces URL à notre liste d'URL. Donc on va faire unextend pour ajouter toutes ces URL. On ne fait pas un append sinon on va avoir une liste de listes.
00:02:43 :Moi ce que je veux c'est une liste flat comme on dit en bon français, donc une liste à un niveauqui va contenir toutes les URL. Donc là dans ce cas-ci on aura une liste avec 1000 éléments à
00:02:52 :l'intérieur de cette liste. Et ensuite il faut que je prenne la prochaine page donc on va faire nextpage URL égal à get next page URL. On va lui passer notre tree et on va dire if not next page URL
00:03:03 :du coup et bien on fait un break tout simplement. Et là je fais un return de toutes nos URL. Etvoilà je suis allé un petit peu vite là j'ai tout fait à la suite comme ça me venait mais vousvoyez qu'une fois qu'on a tous les éléments dont on a besoin en fait et bien et qu'on a des noms
00:03:16 :assez explicite comme on l'a fait ça coule de source on n'a pas besoin trop de se poser laquestion puisque toute la logique en fait est déjà faite ailleurs. Donc là on va vérifier quand même
00:03:25 :on a notre URL tant que c'est true on fait un try donc on essaie de récupérer l'URL de la page.Ensuite HTML parser response.txt donc on récupère le contenu dans notre HTML parser de la page en
00:03:37 :question on récupère toutes les URL on les ajoute à notre liste on récupère la prochaine page s'iln'y a pas de prochaine page on casse et sinon on revient ici et on continue avec la prochaine page.
00:03:48 :Donc je vais tester tout ça je vais mettre un petit logger ici logger.info pour qu'on voitquelque chose donc logger.info et on va dire scrapping et je vais mettre un string scrapping
00:04:01 :page at et on va insérer l'URL ici. Donc je lance le script on va faire donc get all books URL on varevenir ici et on va faire get all books URL à partir de base base URL base URL comme ceci voilàj'enlève tout ça et normalement c'est bon donc je lance on croise les doigts on va voir ce que
00:04:19 :ça donne info scrapping page scrapping page et là on voit déjà qu'on a un petit problème puisqueça scrap toujours la même page en fait alors qu'est ce que j'ai fait ici donc j'ai dû avoir unpetit problème de logique on va analyser tout ça ensemble et oui effectivement puisque en fait
00:04:37 :oui c'est logique je récupère next page URL ici mais en fait je ah oui j'ai en fait je boucletoujours sur l'URL de base donc là on a un petit problème de logique en fait ce qu'il faut c'est àchaque fois que je récupère donc je vais mettre le next page URL le problème c'est que là on a
00:04:54 :des URL là on a fait un URL à partir de base URL aussi alors là vous voyez on a un problème delogique qu'on n'avait pas anticipé puisque là en fait on fait le joint toujours à partir de baseURL donc donc effectivement ça ne peut pas marcher en fait il faut qu'on lui donne une URL qui ne
00:05:12 :soit pas toujours l'URL de base donc je vais rajouter ça dans ma fonction et donc je vaismettre un paramètre URL ici qui va être une chaîne de caractère on va le rajouter là par un URL quiva être URL de la page courante et là à la place de base URL du coup on va mettre URL et on va
00:05:28 :concaténer cette URL avec l'URL de la page suivante donc je reviens ici et là on va adapter un petitpeu notre script donc on a notre next page URL on a notre URL de base mais du coup cette URL vachanger donc c'est logique donc là en fait ce que je vais faire c'est écraser la variable puisque
00:05:45 :on va on va partir d'une URL en fait donc partir de l'URL qu'on va passer à get all books URL quiva être l'URL de base mais ensuite on va mettre à jour cette URL puisqu'on va récupérer l'URL dela prochaine page donc on va lui passer ici l'URL actuelle on écrase notre URL là dedans et comme
00:06:01 :ça on peut quand on revient dans le while passer à la page d'après donc je sais pas si c'est trèsclair je vais refaire le cheminement avec vous on commence notre book on récupère donc les lecontenu de la première URL qui va être l'URL de base on fait ce qu'on a à faire ici avec notre
00:06:15 :try except avec la récupération des URL on ajoute tout ça à notre liste ensuite on récupère l'URLde la prochaine page et on écrase on refait une variable URL si ça n'est si ça ne contient riendonc là encore ça ne change pas on sort ici ça contient quelque chose et bien ce sera l'URL de
00:06:31 :la prochaine page et quand on revient en haut de notre while et bien on sera avec l'URL de laprochaine page on va faire une requête sur cette nouvelle URL donc normalement là ça fonctionneje vais relancer le script si je n'ai rien oublié et on va voir et là effectivement on a bien donc
00:06:45 :notre première page 2 3 4 5 6 etc donc ce que je vais faire ici c'est vérifier déjà qu'on a bientout ce qu'il faut dans les URL donc je vais mettre un point de débug ici pour vérifier que cettefonction fonctionne bien également donc je relance cette fois ci le script en débug pour vérifier
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.