Le blocage avec le user agent
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Un autre blocage auquel on peut faire face c'est le blocage avec les User Agents, donc ça c'estquelque chose qui va être aussi très facile à parer du côté du site si vous ne prenez pas lamoindre précaution de votre côté pour changer ce User Agent. Donc je vais vous montrer ici si
00:00:15 :on clique sur récupérer les livres secrets, là vous voyez qu'on a le texte qui est affiché eton pourrait faire un clic droit pour inspecter les appels qui sont faits. Donc si je vais dans
00:00:23 :Network ici et que je relance la page et que j'appuie sur récupérer les livres secrets,on voit ici le point d'API qui est appelé et si je viens, donc je vais réduire un petit peu pourqu'on y voit quelque chose, on a ici l'URL qu'on peut appeler pour récupérer ces livres secrets.
00:00:38 :Donc je pourrais l'appeler directement, donc je vais mettre cette URL dans mon request et je vaisessayer de récupérer les éléments, donc là ça va être les H2, donc je vais faire un select de tousles H2 sur la page et on va voir si ça fonctionne. Et vous allez voir que si je lance directement ce
00:00:52 :script de cette façon, on a une liste vide. Pourquoi ? Donc non pas parce que ce point d'APIn'existe pas, mais tout simplement parce qu'il est bloqué. Si je vais voir dans la console de
00:01:02 :DuckString ici qui fait tourner le site en local, on voit que j'ai un bad request et que j'ai leget qui a retourné une erreur 400. Donc ça c'est parce qu'en fait j'ai réussi à identifier cette
00:01:12 :requête comme venant d'un bot. Donc je vais mettre un point de debug ici sur le user-adjoin, donc surcette vue qui va vérifier les requêtes qui arrivent et je vais refaire cette requête vers lescrapping-api-books et vous allez voir qu'automatiquement on arrive dans le debugger iciet que si j'agrandis un petit peu cette fenêtre et que j'avance, on va récupérer le user-adjoin
00:01:33 :et le user-adjoin de request par défaut il est très explicite. Il met python-request et la versionqui est utilisée. Donc c'est très très simple pour moi quand on ne fait pas de modification du
00:01:43 :user-adjoin de repérer que cette requête vient d'un bot, donc vient d'un script et non pas d'unhumain et je peux ainsi très facilement la bloquer avec une structure conditionnelle en disant que sije trouve python-request dans user-adjoint j'envoie un json-response qui dit erreur requestfrom bot et je retourne une erreur 400. Sinon si on n'a pas le python-request dans user-adjoint
00:02:02 :et bien je retourne les données. Et ce user-adjoint il va être différent en fonction de comment vousaccédez à la ressource. Si je remets mon site ici, que j'actualise, que je refais un clic droit pour
00:02:13 :ouvrir les outils network et que je clique sur le bouton on va pouvoir inspecter ce qui se passeici. Donc là de nouveau je suis avec ma vue de debug, je vais avancer et vous voyez que cette fois-ci
00:02:22 :le user-adjoint il est bien plus complexe. Qu'est ce que c'est le user-adjoint ? C'est tout simplementune longue chaîne de caractère qui va donner des informations sur la personne qui fait la requête.
00:02:30 :Donc on voit ici Mozilla, Macintosh, Apple WebKit, Chrome etc. Donc c'est juste une chaîne decaractère qui contient les informations pour indiquer par exemple ici que je suis sur macOS,que j'utilise la version 120 de Chrome etc. Donc c'est des informations qui vont être utilisées
00:02:44 :par le site autant pour savoir justement qui fait la requête et pouvoir la bloquer comme onl'a fait ici, mais aussi utilisées de façon analytique comme pour savoir par exemple sivotre site web est plutôt consulté par des appareils mobiles, donc des iPhone, des Android,s'il est consulté par des ordinateurs de bureau, des Mac, des Windows etc. Et donc quand on utilise
00:03:02 :le user-adjoint par défaut, vous voyez que c'est très facile de mon côté de vous bloquer. Donc ceque je peux faire c'est par contre modifier ce user-adjoint. Je vais faire un clic droit,
00:03:10 :copy value pour copier le user-adjoint que j'utilise quand je navigue de façon humaine,donc directement avec mon script. Et si je reviens dans mon script principal ici, je peux très
00:03:20 :facilement modifier cette chaîne de caractère. Donc je vais créer une variable user-adjoint quiva contenir la variable que j'ai copiée dans le mode debug, donc en faisant ma requête manuellement,et je vais changer les entêtes. Donc les entêtes elles se trouvent dans headers, ça va être un
00:03:34 :dictionnaire et dans ce dictionnaire je vais mettre une clé que j'appelle user-adjoint et je vais luipasser la variable user-adjoint que j'ai créée juste ici. Donc on pourrait mettre directement la
00:03:43 :chaîne de caractère aussi, là c'est juste pour faire une variable intermédiaire pour qu'on n'aitpas tout sur la même ligne. Et ensuite qu'est ce que je vais faire ? Et bien tout simplement ici à
00:03:51 :ma requête, passer ces entêtes à l'argument headers. Là encore je pourrais me passer decette variable et tout mettre ici directement, mais c'est juste pour que ça ne prenne pas tropde place. Et si je relance cette fois-ci la requête, donc j'arrête le script ici, je le
00:04:03 :relance, là on voit qu'on arrive dans le point de debug, je continue et cette fois-ci le user-adjointvous voyez c'est pas plus compliqué que ça, cette fois-ci il est bon et donc je continue avec marequête. Et là alors on a quand même une erreur parce que je retourne ma réponse sous forme de
00:04:18 :JSON, donc si je reviens ici vous voyez qu'on retourne un JSON response, donc c'est pour çaque je n'arrive pas à faire le scrapping, mais la requête passe bien. Si je fais un print de
00:04:26 :R.statusCode pour montrer le code de retour qui nous est donné, je relance le script, là onarrive bien dans mon point de debug, je valide, je continue et là on a bien un statut de 200 et nonplus 400 comme on avait auparavant. Si j'enlève les headers d'ici et que je refais le status code
00:04:42 :vous allez voir que là cette fois-ci la requête est bloquée et que j'ai bien un status code de400. Donc vous voyez cette technique elle est très simple mais très efficace, c'est en fait la
00:04:50 :première chose qu'il faut faire si vous utilisez request, c'est de tout de suite modifier leuser-adjoint pour ne pas avoir Python request dans le user-adjoint, sinon vous êtes là encorequasiment assuré d'être bloqué. Et si vous voulez faire un scrapping éthique vous pouvez bien
00:05:04 :entendu modifier ce user-adjoint pour quand même indiquer au site web que vous êtes quelqu'un quisouhaite scrapper votre site, mettre les informations pour vous contacter, comme ça vous faites unscrapping dit éthique en indiquant clairement vos intentions. Mais c'est sûr que comme vous l'avez
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.