Le blocage par limitation des requêtes
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Dans cette partie, on va voir le concept du blocage par limitation des requêtes etcomment essayer de le contourner, même si vous allez voir que c'est assez facileen théorie et beaucoup plus difficile en pratique. Cette pratique, c'est donc la
00:00:13 :pratique qu'on appelle en anglais du rate limiting, c'est-à-dire qu'on vapermettre à quelqu'un d'accéder à un site qu'un certain nombre de fois etvous allez voir comment c'est très facile à implémenter du côté desdéveloppeurs en back-end sans faire quelque chose de très compliqué.
00:00:26 :On peut tout simplement indiquer qu'on souhaite par exemple que quelqu'un nepuisse pas accéder plus de cinq fois par minute à notre site. Donc là, j'ai le
00:00:33 :site en local déjà sans cette limitation et on va voir par la suiteen la rajoutant ce que ça change. Donc là, si j'accède au site, si je
00:00:40 :rafraîchis la page, vous voyez que je peux le faire plusieurs fois, ça va pasposer de problème. De la même façon, si j'essayais de le faire avec le module
00:00:46 :request, je peux donc lancer mon script et on va bien récupérer le h1 de la pageet je peux faire ça de façon assez importante en faisant une boucle parexemple de 50 itérations et en répétant cette opération. Donc je relance le
00:00:59 :script et là vous voyez qu'on lance 50 fois l'opération et on n'est pasdérangé. Par contre, si maintenant du côté duback-end, je fais cette petite opération ici qui tient en quelques lignes commevous pouvez le voir, je vais indiquer ici que je souhaite limiter l'accès à cettepage à cinq fois par période de 60 secondes. Donc dès qu'on va accéder en
00:01:18 :60 secondes, donc dans une minute, au moins cinq fois à la page, la sixièmefois on va être bloqué et ici je vais retourner cette erreur. Donc là si j'essaie
00:01:26 :de nouveau avec cette fois-ci cette protection qui est affichée, je vais lefaire déjà à la main, vous allez voir que même à la main on va être limitédonc je relance la page, j'actualise une fois, deux fois, trois fois, quatre fois,cinq fois et à la sixième fois vous allez voir que là voilà on est bloqué
00:01:42 :rate limit exceeded. Il m'indique ici, donc comme je l'ai mis je suis assez gentil, jedis qu'on a utilisé les cinq requêtes et que la nuit est cinq. Je n'ai pas
00:01:49 :indiqué ici la durée pendant laquelle je vais limiter la personne mais là sij'essaie de nouveau vous voyez que je suis de nouveau limité. Donc là je peux
00:01:56 :attendre une minute, je vais poser la vidéo et on va voir que ça va donner lamême chose avec notre script ici dans notre boucle. Une fois qu'on aura de
00:02:02 :nouveau accès au site, à partir de la sixième itération on va être bloqué eton aura une erreur car on ne pourra pas récupérer le h1 sur la page car onaura tout simplement pas accès au html. Là si je fais un clic droit pour
00:02:13 :inspecter ce code, vous voyez qu'on a juste dans le body ce texte qui estaffiché, rien dans le head, juste un html très très très simple et rien deplus que l'on peut scraper. Donc voilà j'ai attendu suffisamment de temps, si je
00:02:26 :rafraîchis la page ici vous voyez que j'ai de nouveau accès au site et là sij'essaie de relancer mon script vous allez voir qu'on va être trèsrapidement bloqué et en fait non parce qu'en fait j'ai fait une erreur toutebête dans mon script c'est que j'ai mis la boucle ici, je me disais aussi que
00:02:39 :c'était assez rapide donc en fait on effectuait la requête une seule fois etensuite on effectuait cette sélection sur le h1 50 fois donc c'est pour ça quec'était assez rapide mais si je relance cette fois ci avec la boucle aubon endroit vous allez voir que là assez rapidement on va être bloqué. Donc vous
00:02:53 :voyez à peine deux itérations, j'en avais fait une de mon côté et j'en avaisfait une autre ou deux avec l'essai du script et là on est directement bloquédonc on fait deux itérations ici et là directement on a le non type et sij'essaie de relancer le script on va l'avoir tout de suite sans même pouvoir
00:03:09 :y accéder une seule fois. Donc quelle est la première façon de régler ceproblème ? Elle est très très simple c'est tout simplement de faire un import
00:03:16 :de time et de faire un time.sleep pour attendre un certain nombre de tempsdonc ce n'est pas forcément très clair toujours combien de temps il fautattendre, ce n'est jamais clair non plus est-ce qu'on va un jour être débloquélà ça va dépendre vraiment de chaque site. Là dans ce cas-ci je vous ai
00:03:29 :montré la mesure que j'ai mise en place qui est d'autoriser uniquement cinqrequêtes par 60 secondes mais c'est rare que le site va vous indiquer cettedonnée. Donc là le mieux que vous pouvez faire c'est en premier lieu d'essayer de
00:03:41 :ralentir votre scrapping pour éviter le plus possible de surcharger ça va detoute façon être quelque chose d'éthique en premier lieu de ne passurcharger un site avec des requêtes donc c'est quelque chose que je vousconseille toujours de mettre en place que ce soit si vous le faites
00:03:55 :manuellement ou avec des méthodes professionnelles comme avec bright dataqui de toute façon va le faire jusqu'à un certain point pour vous pour éviterde surcharger les sites mais si vous le faites de votre côté donc déjà dès ledépart de commencer à limiter le nombre de requêtes pour ne pas surcharger le
00:04:08 :site ça va être quelque chose d'éthique et ça va éviter aussi de vousfaire bloquer. La deuxième façon de faire c'est une façon un peu plus
00:04:15 :professionnelle c'est d'utiliser des proxys donc je vous montre avec ce codeici là vous avez une liste de proxys qu'on va utiliser vous avez une fonctionqui va récupérer un proxy aléatoire à partir de cette liste donc là on n'en aqu'un seul mais on pourrait en mettre bien plus on a ici un dictionnaire qui
00:04:30 :est retourné avec le proxy qui va être retourné dans le dictionnaire pour lesrequêtes en HTTP ou en HTTPS et ensuite on peut utiliser donc cette fonction quiva récupérer un proxy aléatoire essayer de faire la requête avec ce proxy et siça ne fonctionne pas et bien réessayer de nouveau donc là on fait un peu une
00:04:47 :sorte de fonction récursive puisqu'on essaye la requête et si elle ne réussitpas on rappelle la fonction pour essayer avec un autre proxy et on essaie commeça de récupérer le h1 le problème de ça si je lance le script là vous voyezqu'on a directement une erreur donc quel est le problème de ça c'est qu'en
00:05:02 :fait ces proxys vont être très difficiles à trouver donc je vais vousmontrer il y a plein de sites qui existent vous pouvez chercher sur googlefree proxy list et vous allez avoir des centaines de résultats le problème detout ça c'est que comme tout ce qui est gratuit forcément tout le monde se jette
00:05:17 :dessus et en fait ça fait bien longtemps que ces façons de faire ne produisentque très peu de résultats en fait vous allez passer votre temps à chercher desproxys peu importe ce que vous mettez en place les méthodes gratuites vont lestrois quarts du temps être bloqués parce que ça va être des proxys de
00:05:32 :centres de données des proxys qui ont déjà été identifiés par les sites commedes adresses qui sont utilisées pour le scrapping donc vous avez très très peude chances avec ça d'avoir un résultat positif et vous allez finalement perdredu temps à faire des centaines de requêtes pour en avoir une qui va
00:05:48 :réussir à passer donc la seule solution pour ça c'est d'utiliser des proxysprofessionnels des proxys notamment résidentiels et on verra comment lesutiliser avec brightdata dans une autre partie mais voilà si vous voulezessayer sachez que c'est possible techniquement comme je vous le disaisc'est pas compliqué on fait juste rajouter un petit dictionnaire ici qu'on
00:06:05 :passe à notre requête dans cet argument proxy donc c'est pas sur la techniqueque c'est difficile c'est vraiment sur l'infrastructure d'avoir accès à cesproxys là forcément ça va nous coûter un petit peu d'argent et j'ai envie dedire heureusement aussi parce que si c'était aussi facile d'utiliser des
00:06:20 :proxys et bien ce serait aussi beaucoup plus simple pour tout le monde de fairedu scrapping et le côté éthique finalement de la chose serait plusdifficile à respecter tout ça n'est pas pour dire que dès que vous payez del'argent forcément vous faites un scrapping éthique ça n'est pas du tout
00:06:35 :ce que je veux dire mais plus que forcément dès qu'un service est payantça met une certaine barrière à l'entrée si on n'avait pas besoin dedébourser un seul centime pour pouvoir essayer et scrapper toutes lesinformations du monde et bien beaucoup de gens le feraient donc vous pouvez
00:06:48 :essayer sur des sites de test vous pouvez essayer en local vous pouvezfaire votre propre serveur pour vous entraîner et dès que vous allez avoirenvie de faire des solutions professionnelles qui tournent encontinu sans être bloqués il faudra vous tourner vers des solutionsprofessionnelles qui heureusement ne coûtent pas non plus des sommes
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.