Récupérer l'URL de la prochaine page
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :On avance, on avance, on commence à arriver près de la fin, on a déjà toutes ces fonctions qui sont faites.La prochaine fonction qu'on va faire, on va continuer en remontant dans l'ordre, c'est la fonction qui va nous permettre de récupérerl'URL de la prochaine page, là encore à partir d'un objet tree, donc un objet HTML parser
00:00:16 :qu'on aura déjà récupéré et qu'on va utiliser pour toutes ces fonctions.Donc dans cette fonction on va avoir une approche un petit peu différente de ce qu'on a fait précédemment,à savoir les approches E, A, F, B et L, B, Y, L que vous devez commencer à connaître,puisque dans ce cas-ci on ne va pas faire un try except, mais plutôt
00:00:33 :vérifier qu'on a bien quelque chose, qu'on a bien un bouton sur lequel cliquer pour continuer.La raison c'est qu'ici on peut arriver à un point où il n'y a plus de pages. Si on arrive à la dernière page, il n'y a
00:00:43 :plus de pages et c'est normal.Donc c'est un peu différent de ce qu'on avait précédemment, par exempleavec des erreurs, si on arrive sur une page où il n'y a pas le prix ou pas la quantité en stock,là ce n'est pas normal. Donc là effectivement on peut avoir des erreurs et dans ce cas-ci on va lever une erreur, on va la
00:00:57 :loguer, on va potentiellement, comme on l'a fait, continuer avec notre script parce qu'on ne veut pas faire planter le script, on veut juste indiquerqu'il y a eu une erreur,mais c'est pas un comportement normal.
00:01:06 :Là dans le cas de la prochaine page, c'est normal à un moment qu'on arrive à la fin, il faut bien un moment qu'il n'y ait plusde pages sur notre librairie, on ne peut pas aller jusqu'à l'infini.
00:01:13 :Donc dans ce cas-ci on va vérifier,plutôt que de faire un try except, on va vérifier est-ce qu'on a un bouton next et si c'est le cas on va retourner quelquechose et sinon on va retourner tout simplement rien pour indiquer qu'on est arrivé à la fin et qu'il n'y a plus de pages et ça
00:01:26 :on pourra le gérer à l'intérieur d'une autre fonction. Donc quand on va appeler cette fonction getNextPageURL,si on a quelque chose, on va continuer et quand on arrivera avec cette fonction qui nous retourne non, ça veut dire qu'on n'aura plusde pages à parcourir et on va pouvoir sortir par exemple de notre boucle qui bouclera sur toutes les pages du site.
00:01:43 :Donc si je reviens sur mon site, là on voit qu'on a un bouton next en bas, je vais cliquer dessus et refaire un inspect pourouvrir l'inspecteur et on voit que c'est un lien avec, là encore, un lien relatif qu'il va falloir gérer pour le rendre en lien absolu
00:01:56 :avec tout simplement next à l'intérieur et on a un li avec une classe de next et un li avec une classe de current.Donc je vais vérifier si le li apparaît d'autrefois, on a deux matchs ici,donc le next ici et en fait le deuxième next c'est le texte tout simplement
00:02:10 :à l'intérieur du bouton. Donc on a bien une seule classe next à l'intérieur de ce li donc ça va être assez facile à cibler.Donc je vais remettre le petit chrome sur le côté et on va récupérer cet élément.
00:02:20 :Donc next page node, dans ce cas-ci, ça va être égal à tree.css firstpuisque là on n'a qu'un seul bouton next qu'on souhaite récupérer, il n'y en a qu'un sur la page et il n'y en a qu'un qu'on souhaite récupérer.
00:02:37 :Si vous vous souvenez bien, on avait un lien à l'intérieur de cet élément,nous ce qu'on veut c'est le href qui est sur ce lien. Donc ce qu'on va faire c'est ici
00:02:53 :et avec le css first on va récupérer normalement juste celui-là.Donc je vais faire un print de next page node avec les crochets href pour vérifiersi on récupère bien les données. Alors là il faut que je change un petit peu mon script,
00:03:04 :on va faire le get next page url, on part de notre url de base, on lui passe le tree, je relanceet là alors on a un petit problème. Ah oui puisque j'ai fait directement ici, j'ai pas fait sur les attributs, il faut faire bien sûr
00:03:16 :sur les attributs et non pas sur le noeud lui-même et là on récupère bien le catalogue pagetirée 2. Donc qu'est ce qu'on va faire ici ? Comme je vous ai dit on va vérifier déjà si on a quelque chose
00:03:25 :sur cet attribut. Si on a un next page node, donc je vais enlever ce print,donc qu'est ce qu'on veut vérifier ici ? Est-ce qu'on a un node, un noeud qui est existant ? Donc est-ce qu'on a trouvé ce bouton next ?
00:03:35 :Et est-ce qu'on a également un href sur ce lien ? Là encore on va faire plusieurs vérifications d'un couppuisque ce n'est pas tout d'avoir le noeud, il faut aussi qu'il y ait l'information sur le noeud. Donc on va dire if nextPageNode and
00:03:48 :href in nextPageNode, nextPageNode, comme ceci,.attribute, donc si on a un attribut href à l'intérieur de ce dictionnaire,eh bien on va continuer et on va récupérer la valeur de cet attribut.
00:04:01 :Et donc là dans ce cas-ci on va faire un return tout simplement.Alors on va pas le faire encore puisqu'il va falloir qu'on fasse notre url join avant. On va faire un
00:04:09 :nextPageNode.attribute, crochet, href, et on va faire un url join de baseURLavec cet attribut href. Et là on va pouvoir le retourner, on va retourner tout ça.
00:04:22 :Et si ce n'est pas le cas, eh bien là on va faire un return de noneet on va faire un petit logger, mais cette fois-ci ce n'est pas une erreur comme je vous l'ai dit, on va pas faireerreur puisque ce n'est pas un problème qu'il n'y ait pas de bouton, on va juste faire un .debug pour
00:04:34 :indiquer, .debug ou .info, à voir,pour indiquer c'est pas vraiment un debug, là c'est plus une information pour dire qu'il n'y a plus de pageà scraper. Donc on va dire ici on est arrivé à la dernière page. C'est pas très bien dit, je pense qu'on pourrait changer, on pourrait dire
00:04:49 :aucun bouton nexttrouvé sur la page. Voilà. Et on retourne none ici, alors je vais changer monmon annotation de type ici et on va mettre un opérateur où,puisque ça peut être soit une chaîne de caractère, soit un objet none qu'on retourne. Dans ce cas-ci c'est une chaîne de caractère et dans
00:05:05 :ce cas-ci c'est un objet none. Donc voilà pour cettefonction, je vais quand même la tester avant de terminer cette vidéo. Je lanceet là on n'a pas fait de print au niveau de notre main, donc forcément on ne voit rien, je vais faire un print de toutça. Et là normalement on a voilà l'url complète avec catalogue-page2, donc l'url absolu et non plus relatif puisqu'on a fait le
00:05:25 :url-join et on peut donc passer à la page suivante à partir de cette page.Donc voilà, on commence à avoir presque toute la logique, on a fait tout ça et maintenant on va pouvoirpresque boucler le tout, c'est-à-dire arriver sur cette dernière fonction qui va partir de cette page,
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.