Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Donc on va commencer avec la création de la base de notre script et on va commencer toutnaturellement par créer un projet que je vais créer directement avec PyCharm. Je vais l'appeler
00:00:09 :Ecom Notifier tout simplement et on va utiliser les outils de PyCharm pour automatiquement créerun environnement virtuel à l'intérieur de ce dossier. Je vais également créer le fichier
00:00:19 :main.py. Par défaut on va enlever tout ce qu'il y a dedans mais comme ça on n'aura pas besoin decréer le fichier, il sera déjà là pour nous. Donc je vais cliquer sur Create et ça va créer le
00:00:27 :projet avec ce fameux fichier main.py. Donc comme je vous dis je vais enlever tout ce qu'il y aà l'intérieur mais là au moins on a bien configuré notre dossier avec l'environnement virtuel et onva pouvoir ainsi installer les bibliothèques dont on va avoir besoin. Donc je vais ouvrir le terminal,
00:00:40 :on va installer les bibliothèques Request et Selectolax, donc pip install request et pip installSelectolax, install Selectolax comme ceci, tout en minuscules. Je valide avec entrée et j'ai les
00:00:54 :deux premières librairies dont je vais avoir besoin. Je vais les importer au début de monfichier donc on va faire un import de Request et on va importer depuis Selectolax, Selectolax.parseur
00:01:04 :le html parseur qui va nous permettre d'analyser le html pour récupérer les informations qui nousintéressent. Je vais faire une fonction main qui va recevoir une url, pour l'instant je vais mettre
00:01:15 :un pass et je vais créer le fameux ifname égale main pour lancer cette fonction à l'intérieur decette structure conditionnelle et pour l'url on va aller chercher l'url du produit amazon qu'onsouhaite récupérer. Donc là je suis sur la page du produit, c'est une carte graphique Nvidia très
00:01:30 :classique et vous voyez que là on a une url assez longue puisqu'il y a plein de paramètres ici aprèsle point d'interrogation, plein de paramètres qui permettent de définir des tags et pleind'autres choses comme ceci. Donc vous allez bien souvent avoir tous ces paramètres quand vous
00:01:43 :naviguez depuis la page d'accueil vers des produits. Nous ce qui va nous intéresser c'est juste lapremière partie ici et même encore plus précisément cette chaîne de caractère un petitpeu bizarre que vous allez retrouver en fait si on descend dans les descriptions du produit doncdans product information ici, on a quelque chose qui s'appelle l'assign donc qui se retrouve
00:02:01 :effectivement ici dans additional information. Donc c'est cette chaîne de caractère que l'onretrouve également dans l'url à la fin avant le point d'interrogation et après le dp. Donc on va
00:02:10 :pouvoir prendre cette assign et juste en fait si je prends l'url vous allez voir on peut la recréerégalement à partir de cette url donc si je reviens dans pycharm je vais faire une variable url jevais faire un petit peu de place ici et là en fait ce qu'on peut faire c'est enlever cette description
00:02:24 :du produit en chaîne de caractère et juste garder le slash dp slash et le assign ici. Donc c'est leassign on va le mettre dans une variable même et je vais le récupérer ici comme ça on pourra si onle souhaite utiliser un autre assign d'un autre produit qu'on souhaiterait récupérer. Donc je
00:02:39 :vais le mettre ici assign et le concaténer avec cette url et on va passer l'url ici dans notrefonction main. Donc à l'intérieur de cette fonction qu'est ce qu'on va faire on va faire une requête
00:02:48 :avec request on va faire une requête get vers l'url que l'on va passer dans cette fonction main. Jevais récupérer le contenu de cette requête dans une variable response et le contenu de la page dansune variable html content qui va être égal à response.txt et ce qu'on va faire tout de suite
00:03:02 :c'est écrire ce fichier sur le disque parce que c'est toujours bien en fait pour éviter de parla suite refaire cette requête surtout avec amazon on va être très rapidement bloqué en fait c'esttoujours bien de profiter de cette première requête un peu pure je dirais pour écrire le
00:03:17 :fichier sur le disque donc là on va écrire le contenu du fichier donc de la variable html contentdans un fichier amazon.html qui va être donc dans le même dossier que là où j'exécute mon script
00:03:27 :comme ça on va pouvoir faire notre analyse directement depuis le fichier donc là l'analyseest assez simple vous allez voir on va inspecter le fichier html il y a une seule classe à allerchercher mais voilà c'est toujours bien de d'écrire en fait ce fichier lors de la première requête pour
00:03:41 :s'assurer d'avoir la base du html et de pouvoir la réutiliser ensuite je vais créer un objet treequi va être créé à partir de html parser et on va lui donner le html content donc la variable htmlcontent qu'on a défini plus haut et là je crois que j'ai une erreur alors qu'est ce que j'ai fait
00:03:56 :comme erreur alors ça va oui ça va être en right et là il n'est pas content alors je pense que ouic'est une erreur d'indentation tout simplement voilà il y avait trois espaces au lieu de quatreet ensuite donc on va analyser cette page html déjà et voir qu'est ce qu'on peut faire pour
00:04:11 :ne pas être bloqué directement parce que là c'est bien important pour cette première requête defaire une modification ça va être de donner un user agent parce que actuellement avec requestle user agent qui est la chaîne de caractère qui identifie quand on fait une requête avecun navigateur quel navigateur on utilise quel système d'exploitation etc donc par exemple de
00:04:30 :dire qu'on utilise chrome sur un ordinateur mac ou alors qu'on utilise safari sur un élémentios par exemple donc un téléphone ça c'est une chaîne de caractère qui va être envoyé avec larequête et par défaut avec request on va avoir une chaîne de caractère qui va ressembler à python
00:04:45 :request et la version de request donc par exemple 3.12 donc là on va tout de suite être identifiécomme un bot par amazon et il va nous bloquer direct donc si vous faites une première requêtecomme ça sans changer le user agent vous êtes assuré d'être bloqué il va bloquer votre ip en
00:04:59 :fait et la seule façon de changer ça ça va être si vous le faites à la main d'utiliser un vpn parexemple ou un réseau de proxy comme on verra par la suite comme le réseau de proxy donc de brightdata qu'on va utiliser mais voilà quand vous voulez faire vos tests faites bien attention ne
00:05:13 :faites pas une première requête sans changer le user agent sinon vous allez être bloqué direct etvous allez dès le début devoir contourner les restrictions qui vont être faites sur votre ipdonc moi ce que je vais faire c'est utiliser mon user agent donc on peut taper what is my user
00:05:26 :agent par exemple dans google et ça va vous retourner votre user agent il y a plein d'autressites aussi là qui peuvent vous donner votre user agent mais avec google on l'a directement donc jepeux le copier et je vais le mettre dans une chaîne de caractère dans mon script donc qui va être
00:05:39 :dans les headers donc les headers c'est les en-têtes qu'on va passer avec notre requête doncon va mettre user agent ici et je vais passer la chaîne de caractère que je viens de copier dansle user agent et on va passer ces en-têtes à notre requête donc avec l'argument headers donc
00:05:54 :je passe cette variable ici à ma requête et comme ça on aura bien un user agent qui ne va pas êtreidentifié comme un bot maintenant si je retourne sur la page d'amazon on va essayer de trouvercomment récupérer l'information du prix donc il y a plusieurs endroits il est par exemple ici 234
00:06:08 :ici aussi donc on va faire un clic droit inspect pour vérifier ce qu'on a là on a juste un spanavec aria hidden on n'a pas grand chose on a quelques classes ici un peu plus haut qui pourraitêtre utile mais vous voyez qu'il n'y a pas une classe directement qui va cibler le 234 ce que
00:06:21 :je peux faire c'est chercher à d'autres endroits sur la page si je ne trouve pas ce 234 et vousvoyez qu'on a 25 occurrences ici donc je vais essayer d'aller trouver s'il n'y a pas cetteinformation quelque part d'autre avec une classe un peu plus un peu plus facile à récupérer donc on
00:06:34 :a le span avec un ID total cost ici qui est pas mal on va avoir d'autres choses ici donc un valueje suis pas sûr que ce soit la bonne chose ça pourrait être une autre valeur qui est aussiégale à 234 on a ici les choses qui sont un peu mieux découpées donc avec le price whole price
00:06:51 :decimal donc ça c'est pas mal le span ici je l'aime bien parce qu'on a juste les informations avec lechiffre comparativement aux autres on avait le symbole de pounds la décimale etc moi dans ce casci je veux pas les décimales je m'en fous des centimes je veux juste donc le prix complet sans
00:07:06 :les centimes et là on a une classe à price whole qui est bien sur un span je vais chercher si cetteclasse apparaît autre part et elle est effectivement à 22 endroits avec je vais vérifier est-ce qu'ona à chaque fois l'information ici on l'a également ici aussi donc on l'a à plusieurs endroits mais à
00:07:22 :chaque fois on semble avoir la même information donc je vais essayer d'utiliser ça là vous voyezqu'on a le price symbole avec le pound les fractions etc donc je pense que ça c'est pasmal je vais utiliser le span et on va le récupérer donc dans notre script avec select all axes donc
00:07:36 :on va faire une variable price et on va faire un tree.css first parce qu'on souhaite récupéreruniquement une indication là il y en a 22 sur la page mais je vais cibler le span avec cetteclasse et ça devrait nous retourner le premier et on va voir si à chaque fois on arrive à récupérer
00:07:50 :la valeur du prix et je vais donc faire un print pour l'instant de juste price.text et on va voirce que ça va donner alors il est très possible que là je sois déjà bloqué par amazon vu quej'ai fait pas mal de tests etc donc on va essayer si ça ne marche pas j'essaierai de changer mon
00:08:06 :adresse ip pour voir si on peut quand même récupérer cette information avec ce scriptet on va également voir ce que ça donne dans le fichier amazon.html qu'on va écrire sur le
00:08:14 :disque donc je vais faire un clic droit je vais lancer run main ici et on va voir ce qu'on aest ce qu'on a une valeur ou non on attend un petit peu et on a bien cette valeur 234 avec lepoint ici donc ça veut dire qu'on récupère quand même le point donc on pourra l'enlever
00:08:30 :donc on peut faire par exemple une variable intermédiaire on va l'appeler priceNode etensuite on va dire price on va faire un return pour l'instant de int qui va être priceNodedonc pas print mais priceNode.text et on va juste remplacer le point par une chaîne de
00:08:45 :caractère vide donc on va enlever en fait le point et on va retourner tout ça donc comme çaon aura bien le nombre ici en tant que nombre donc en tant que nombre entier sans le pointdonc ça semble fonctionner là vous voyez je n'ai pas été bloqué je pense que si je le fais de
00:08:59 :nouveau un petit peu trop ça risque de bloquer si je vais voir amazon.html ici on a bien lefichier complet si je retourne voir je crois que c'était a pricehole donc là on a des classes decss et là on a le fameux 234 et on a effectivement le point ici donc en fait le problème ici c'est
00:09:17 :qu'on a un span qui contient un autre span avec le priceDecimal donc en fait c'est ça qu'onrécupère comme on récupère tout le texte qui est à l'intérieur on va pas récupérer le spanon va récupérer le texte qui est à l'intérieur du span puisqu'on a un premier span qui se termine
00:09:32 :du coup ici et qui englobe le point donc voilà je pense que je vais rester là dessus juste àremplacer le point c'est pas c'est pas très problématique et ça me permet de récupérer leprix donc comme je vous dis là on va on va le réessayer une deuxième fois on va voir si ça
00:09:45 :fonctionne de nouveau je vais relancer le script on va voir si on récupère bien le prix alors làj'ai pas fait de print on va faire un print et on va enlever notre notre withOpen là on n'en a plusbesoin c'était juste pour avoir une première version sur le disque de notre fichier
00:10:00 :html si jamais on veut l'avoir comme référence mais là je n'en ai plus besoin donc je vaisl'enlever donc j'ai refait le print ici je relance on va voir si on récupère l'information 234 çamarche de nouveau je vais le refaire une dernière fois donc pour l'instant vous voyez on n'est pas
00:10:13 :encore bloqué ça va mais si on fait la requête trop souvent vous allez voir qu'assez rapidementon va être bloqué et je vais vous montrer aussi si j'enlève les headers ici donc si je les enlèvede ma requête je suis pas sûr que ça va marcher on va voir vous voyez directement non type donc
00:10:26 :j'essaie de faire la requête mais directement on l'identifie comme un bot je vais remettre ceque j'avais en fait le withOpen ici donc je fais quelques ctrl z juste pour vous montrer qu'une foisqu'on est bloqué le html va être différent là je le relance avec les headers et là vous allez
00:10:38 :voir que comme on l'a fait une fois sans les headers normalement amazon va bloquer notre ipet même si on met les headers par la suite avec le user agent on devrait être bloqué de la mêmefaçon et non ce n'est pas le cas donc on a de la chance il nous a pas encore bloqué donc je
00:10:51 :pense qu'il autorise comme vous le voyez un certain scrapping mais si on le faittrop souvent vous allez voir qu'au bout d'un moment on va être assez rapidement bloqué donclà on va aller voir donc le fichier html il va toujours être être bon je vais faire une petite
00:11:05 :boucle on va faire un import de time et on va faire une petite boucle ici on va dire for e inrange de 10 on va faire 10 requêtes on va laisser se passer un petit peu quand même pour passurcharger le site même si amazon n'a pas trop de soucis à se faire là dessus je pense mais c'est
00:11:20 :juste voilà pour quand même ne pas se faire bloquer trop violemment et rester un minimum éthique doncon va faire une petite un petit time.sleep je relance et vous allez voir normalement que
00:11:30 :on va être bloqué à un certain moment et là vous voyez on arrive à un moment où on a uneerreur non type puisque on n'a pas d'attribut texte sur price node donc ça veut dire qu'onn'a pas réussi à récupérer price node et donc c'est que dans le html on n'avait pas on n'a pas
00:11:44 :trouvé en fait ce span avec cette classe et donc ça veut dire qu'en fait normalement on va êtrebloqué je vais aller voir le html ici on va remonter un petit peu là vous voyez qu'on aune petite centaine de lignes donc là c'est déjà une bonne indication qu'on n'a pas toute la page
00:11:57 :et vous voyez ici voilà je regarde un petit peu là on a effectivement un avertissement enfin unmessage qui nous dit voilà pour parler des processus automatisés écrivez nous api servicevous pouvez utiliser les marketplace api etc donc vous voyez qu'on a on a un message ici qui nous
00:12:14 :dit qu'on peut pas on peut pas récupérer l'information et effectivement donc le prixn'est plus affiché sur cette page et c'est pour ça qu'on a cette erreur donc vous voyez que làon est bloqué ce qu'on peut faire comme je vous disais c'est utiliser par exemple un vpn pour faire
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.