Remarque: Étant donné que la version complète de cette réponse dépasse la limite de longueur de Stack Overflow, vous devrez vous rendre sur GitHub pour lire la version étendue, avec plus de conseils et de détails.
Afin d'empêcher le grattage (également connu sous le nom de Webscraping , Screenscraping , Web data mining , Web harvesting ou Web data extraction ), il est utile de savoir comment ces grattoirs fonctionnent et, par extension, ce qui les empêche de bien fonctionner.
Il existe différents types de grattoir et chacun fonctionne différemment:
Les araignées, comme le bot de Google ou les copieurs de sites Web comme HTtrack , qui suivent récursivement des liens vers d'autres pages afin d'obtenir des données. Ceux-ci sont parfois utilisés pour le scraping ciblé pour obtenir des données spécifiques, souvent en combinaison avec un analyseur HTML pour extraire les données souhaitées de chaque page.
Scripts shell: Parfois, des outils Unix courants sont utilisés pour le scraping: Wget ou Curl pour télécharger des pages, et Grep (Regex) pour extraire les données.
Analyseurs HTML, tels que ceux basés sur Jsoup, Scrapy , et d' autres. Semblables à ceux basés sur des expressions rationnelles shell-script, ceux-ci fonctionnent en extrayant des données de pages basées sur des modèles en HTML, ignorant généralement tout le reste.
Par exemple: si votre site Web dispose d'une fonction de recherche, un tel grattoir peut soumettre une demande de recherche, puis obtenir tous les liens de résultats et leurs titres à partir de la page de résultats HTML, afin d'obtenir spécifiquement uniquement les liens de résultats de recherche et leurs titres . Ce sont les plus courants.
Écrans de veille, basés par exemple sur. Sélénium ou PhantomJS , qui ouvrent votre site Web dans un vrai navigateur, exécutent JavaScript, AJAX, etc., puis obtiennent le texte souhaité de la page Web, généralement en:
Récupérer le code HTML du navigateur après le chargement de votre page et l'exécution de JavaScript, puis en utilisant un analyseur HTML pour extraire les données souhaitées. Ce sont les plus courantes, et de nombreuses méthodes pour casser les analyseurs / scrapers HTML fonctionnent également ici.
Prendre une capture d'écran des pages rendues, puis utiliser l'OCR pour extraire le texte souhaité de la capture d'écran. Ce sont rares, et seuls les grattoirs dédiés qui veulent vraiment que vos données le configurent.
Services de webscraping tels que ScrapingHub ou Kimono . En fait, il y a des gens dont le travail consiste à comprendre comment gratter votre site et retirer le contenu pour que les autres puissent l'utiliser.
Sans surprise, les services de grattage professionnels sont les plus difficiles à dissuader, mais si vous faites en sorte qu'il soit difficile et long de comprendre comment gratter votre site, ceux-ci (et les personnes qui les paient pour le faire) ne seront pas gênés de gratter votre site Web.
Incorporer votre site Web dans les pages d'autres sites avec des cadres et intégrer votre site dans des applications mobiles.
Bien qu'elles ne soient pas techniquement grattantes, les applications mobiles (Android et iOS) peuvent intégrer des sites Web et injecter des CSS et JavaScript personnalisés, modifiant ainsi complètement l'apparence de vos pages.
Copier-coller humain: les gens vont copier et coller votre contenu afin de l'utiliser ailleurs.
Il y a beaucoup de chevauchement entre ces différents types de grattoirs, et de nombreux grattoirs se comporteront de la même manière, même s'ils utilisent des technologies et des méthodes différentes.
Ces conseils concernent principalement mes propres idées, diverses difficultés que j'ai rencontrées lors de l'écriture de grattoirs, ainsi que des informations et des idées provenant des différents sites Web.
Comment arrêter de gratter
Vous ne pouvez pas complètement l'empêcher , car quoi que vous fassiez, des grattoirs déterminés peuvent toujours comprendre comment gratter. Cependant, vous pouvez arrêter beaucoup de raclage en faisant quelques choses:
Surveillez vos journaux et modèles de trafic; limiter l'accès si vous voyez une activité inhabituelle:
Vérifiez régulièrement vos journaux et en cas d'activité inhabituelle indiquant un accès automatisé (grattoirs), comme de nombreuses actions similaires à partir de la même adresse IP, vous pouvez bloquer ou limiter l'accès.
Plus précisément, quelques idées:
Limitation de débit:
Autorisez uniquement les utilisateurs (et les grattoirs) à effectuer un nombre limité d'actions dans un certain temps - par exemple, n'autorisez que quelques recherches par seconde à partir d'une adresse IP ou d'un utilisateur spécifique. Cela ralentira les racleurs et les rendra inefficaces. Vous pouvez également afficher un captcha si les actions sont effectuées trop rapidement ou plus rapidement qu'un utilisateur réel.
Détecter une activité inhabituelle:
Si vous voyez une activité inhabituelle, comme de nombreuses demandes similaires à partir d'une adresse IP spécifique, quelqu'un qui regarde un nombre excessif de pages ou effectue un nombre inhabituel de recherches, vous pouvez empêcher l'accès ou afficher un captcha pour les demandes suivantes.
Ne vous contentez pas de surveiller et de limiter le débit par adresse IP - utilisez également d'autres indicateurs:
Si vous bloquez ou limitez le débit, ne le faites pas uniquement par adresse IP; vous pouvez utiliser d'autres indicateurs et méthodes pour identifier des utilisateurs ou des grattoirs spécifiques. Voici quelques indicateurs qui peuvent vous aider à identifier des utilisateurs / grattoirs spécifiques:
La rapidité avec laquelle les utilisateurs remplissent les formulaires et où cliquer sur un bouton;
Vous pouvez collecter de nombreuses informations avec JavaScript, telles que la taille / résolution d'écran, le fuseau horaire, les polices installées, etc. vous pouvez l'utiliser pour identifier les utilisateurs.
En-têtes HTTP et leur ordre, en particulier User-Agent.
Par exemple, si vous obtenez plusieurs requêtes à partir d'une seule adresse IP, toutes utilisant le même agent utilisateur, la taille d'écran (déterminée avec JavaScript), et l'utilisateur (scraper dans ce cas) clique toujours sur le bouton de la même manière et à à intervalles réguliers, c'est probablement un grattoir d'écran; et vous pouvez bloquer temporairement des demandes similaires (par exemple, bloquer toutes les demandes avec cet agent utilisateur et la taille d'écran provenant de cette adresse IP particulière), et de cette façon vous ne gênerez pas les vrais utilisateurs sur cette adresse IP, par exemple. en cas de connexion internet partagée.
Vous pouvez également aller plus loin, car vous pouvez identifier des demandes similaires, même si elles proviennent d'adresses IP différentes, indiquant un grattage distribué (un grattoir utilisant un botnet ou un réseau de proxys). Si vous recevez un grand nombre de demandes par ailleurs identiques, mais qu'elles proviennent d'adresses IP différentes, vous pouvez bloquer. Encore une fois, soyez conscient de ne pas bloquer par inadvertance de vrais utilisateurs.
Cela peut être efficace contre les screenscrapers qui exécutent JavaScript, car vous pouvez obtenir beaucoup d'informations d'eux.
Questions connexes sur Security Stack Exchange:
Au lieu de bloquer temporairement l'accès, utilisez un Captcha:
Le moyen simple de mettre en œuvre la limitation de débit serait de bloquer temporairement l'accès pendant un certain temps, mais l'utilisation d'un Captcha peut être meilleure, voir la section sur les Captcha plus loin.
Nécessite une inscription et une connexion
Exiger la création de compte afin de visualiser votre contenu, si cela est possible pour votre site. C'est un bon moyen de dissuasion pour les grattoirs, mais c'est aussi un bon moyen de dissuasion pour les vrais utilisateurs.
- Si vous avez besoin de créer un compte et de vous connecter, vous pouvez suivre avec précision les actions des utilisateurs et des scraper. De cette façon, vous pouvez facilement détecter quand un compte spécifique est utilisé pour le scraping et l'interdire. Des choses comme la limitation du taux ou la détection d'abus (comme un grand nombre de recherches en peu de temps) deviennent plus faciles, car vous pouvez identifier des grattoirs spécifiques au lieu de simplement des adresses IP.
Afin d'éviter que les scripts créent de nombreux comptes, vous devez:
Exigez une adresse e-mail pour l'inscription et vérifiez cette adresse e-mail en envoyant un lien qui doit être ouvert pour activer le compte. Autorisez un seul compte par adresse e-mail.
Exiger un captcha à résoudre lors de l'enregistrement / création de compte.
Exiger la création de compte pour afficher le contenu éloignera les utilisateurs et les moteurs de recherche; si vous avez besoin de créer un compte pour voir un article, les utilisateurs iront ailleurs.
Bloquer l'accès à partir des adresses IP du service d'hébergement et de suppression de cloud
Parfois, les grattoirs seront exécutés à partir de services d'hébergement Web, tels que Amazon Web Services ou GAE, ou VPS. Limitez l'accès à votre site Web (ou affichez un captcha) pour les demandes provenant des adresses IP utilisées par ces services d'hébergement cloud.
De même, vous pouvez également limiter l'accès à partir des adresses IP utilisées par les fournisseurs de proxy ou VPN, car les grattoirs peuvent utiliser de tels serveurs proxy pour éviter la détection de nombreuses demandes.
Sachez qu'en bloquant l'accès à partir de serveurs proxy et de VPN, vous affecterez négativement les utilisateurs réels.
Rendez votre message d'erreur non descriptif si vous bloquez
Si vous bloquez / limitez l'accès, vous devez vous assurer que vous ne dites pas au racleur ce qui a causé le blocage, ce qui lui donne des indices sur la façon de réparer son racleur. Une mauvaise idée serait donc d'afficher des pages d'erreur avec du texte comme:
Trop de demandes provenant de votre adresse IP, veuillez réessayer plus tard.
Erreur, l'en-tête de l'agent utilisateur n'est pas présent!
Au lieu de cela, affichez un message d'erreur convivial qui ne dit pas au grattoir ce qui l'a causé. Quelque chose comme ça est beaucoup mieux:
- Désolé, quelque chose s'est mal passé. Vous pouvez contacter le support via
helpdesk@example.com
, si le problème persiste.
C'est également beaucoup plus convivial pour les vrais utilisateurs, s'ils voient une telle page d'erreur. Vous devriez également envisager d'afficher un captcha pour les demandes suivantes au lieu d'un blocage dur, au cas où un utilisateur réel verrait le message d'erreur, afin de ne pas bloquer et donc de faire en sorte que des utilisateurs légitimes vous contactent.
Utilisez Captchas si vous pensez que votre site Web est accessible par un grattoir.
Les captchas ("Test complètement automatisé pour distinguer les ordinateurs et les humains") sont très efficaces contre l'arrêt des grattoirs. Malheureusement, ils sont également très efficaces pour irriter les utilisateurs.
En tant que tels, ils sont utiles lorsque vous suspectez un grattoir possible et que vous souhaitez arrêter le grattage, sans bloquer également l'accès au cas où ce ne serait pas un grattoir mais un véritable utilisateur. Vous voudrez peut-être envisager de montrer un captcha avant d'autoriser l'accès au contenu si vous suspectez un grattoir.
Choses à savoir lors de l'utilisation de Captchas:
Ne lancez pas le vôtre, utilisez quelque chose comme reCaptcha de Google : c'est beaucoup plus facile que d'implémenter un captcha vous-même, c'est plus convivial que certaines solutions de texte flou et déformé que vous pourriez trouver vous-même (les utilisateurs n'ont souvent qu'à cocher une case ), et c'est aussi beaucoup plus difficile à résoudre pour un scripteur qu'une simple image servie depuis votre site
N'incluez pas la solution au captcha dans le balisage HTML: j'ai en fait vu un site Web qui avait la solution pour le captcha dans la page elle - même , (bien que très bien cachée), ce qui la rend plutôt inutile. Ne faites pas quelque chose comme ça. Encore une fois, utilisez un service comme reCaptcha, et vous n'aurez pas ce genre de problème (si vous l'utilisez correctement).
Les captchas peuvent être résolus en vrac: il existe des services de résolution de captcha où les humains réels et peu payés résolvent les captchas en vrac. Encore une fois, l'utilisation de reCaptcha est une bonne idée ici, car ils ont des protections (comme le temps relativement court dont dispose l'utilisateur pour résoudre le captcha). Ce type de service est peu susceptible d'être utilisé à moins que vos données ne soient vraiment utiles.
Servez votre contenu texte comme une image
Vous pouvez restituer du texte dans une image côté serveur et servir celle-ci à afficher, ce qui empêchera les simples grattoirs d'extraire du texte.
Cependant, cela est mauvais pour les lecteurs d'écran, les moteurs de recherche, les performances et à peu près tout le reste. C'est également illégal dans certains endroits (en raison de l'accessibilité, par exemple, l'Americans with Disabilities Act), et il est également facile de le contourner avec certains OCR, alors ne le faites pas.
Vous pouvez faire quelque chose de similaire avec les sprites CSS, mais cela souffre des mêmes problèmes.
N'exposez pas votre ensemble de données complet:
Si possible, ne fournissez pas un moyen pour un script / bot d'obtenir tout votre ensemble de données. Par exemple: vous avez un site d'actualités, avec beaucoup d'articles individuels. Vous pouvez rendre ces articles accessibles uniquement en les recherchant via la recherche sur site, et, si vous n'avez pas la liste de tous les articles sur le site et leurs URL n'importe où, ces articles ne seront accessibles qu'en utilisant la recherche fonctionnalité. Cela signifie qu'un script voulant retirer tous les articles de votre site devra effectuer des recherches pour toutes les phrases possibles qui peuvent apparaître dans vos articles afin de les trouver toutes, ce qui prendra du temps, horriblement inefficace et fera, espérons-le, le grattoir abandonne.
Cela sera inefficace si:
- De toute façon, le bot / script ne veut pas / n'a pas besoin de l'ensemble de données complet.
- Vos articles sont diffusés à partir d'une URL qui ressemble à quelque chose
example.com/article.php?articleId=12345
. Cela (et des choses similaires) qui permettra aux grattoirs de simplement parcourir tous les articleId
s et de demander tous les articles de cette façon.
- Il existe d'autres façons de retrouver éventuellement tous les articles, par exemple en écrivant un script pour suivre les liens dans les articles qui mènent à d'autres articles.
- La recherche de quelque chose comme "et" ou "le" peut révéler presque tout, donc c'est quelque chose dont il faut être conscient. (Vous pouvez éviter cela en ne renvoyant que les 10 ou 20 premiers résultats).
- Vous avez besoin de moteurs de recherche pour trouver votre contenu.
N'exposez pas vos API, points de terminaison et autres éléments similaires:
Assurez-vous de ne pas exposer d'API, même involontairement. Par exemple, si vous utilisez AJAX ou des requêtes réseau depuis Adobe Flash ou Java Applets (Dieu nous en préserve!) Pour charger vos données, il est trivial de regarder les requêtes réseau à partir de la page et de savoir où ces requêtes vont aller, et rétroconcevoir et utiliser ces points d'extrémité dans un programme de décapage. Assurez-vous d'obscurcir vos points de terminaison et de les rendre difficiles à utiliser pour les autres, comme décrit.
Pour dissuader les analyseurs et les grattoirs HTML:
Étant donné que les analyseurs HTML fonctionnent en extrayant le contenu des pages en fonction de modèles identifiables dans le HTML, nous pouvons intentionnellement modifier ces modèles de manière à casser ces grattoirs, ou même les visser. La plupart de ces conseils s'appliquent également à d'autres grattoirs comme les araignées et les grattoirs.
Changez fréquemment votre HTML
Les grattoirs qui traitent directement le HTML le font en extrayant le contenu de parties spécifiques et identifiables de votre page HTML. Par exemple: si toutes les pages de votre site Web ont un div
avec un identifiant de article-content
, qui contient le texte de l'article, alors il est trivial d'écrire un script pour visiter toutes les pages d'article de votre site et d'extraire le texte du contenu de la article-content
div sur chaque page d'article, et voilà, le grattoir a tous les articles de votre site dans un format qui peut être réutilisé ailleurs.
Si vous modifiez fréquemment le code HTML et la structure de vos pages, ces grattoirs ne fonctionneront plus.
Vous pouvez fréquemment changer les identifiants et les classes d'éléments dans votre code HTML, peut-être même automatiquement. Donc, si votre produit div.article-content
ressemble à quelque chose div.a4c36dda13eaf0
et change chaque semaine, le grattoir fonctionnera bien au début, mais se cassera après une semaine. Assurez-vous également de modifier la longueur de vos identifiants / classes, sinon le grattoir utilisera div.[any-14-characters]
pour trouver le div souhaité à la place. Méfiez-vous des autres trous similaires aussi ..
S'il n'y a aucun moyen de trouver le contenu souhaité à partir du balisage, le grattoir le fera à partir de la façon dont le code HTML est structuré. Donc, si toutes les pages de votre article sont similaires en ce que chaque contenu div
dans un div
qui vient après h1
est le contenu de l'article, les grattoirs obtiendront le contenu de l'article en fonction de cela. Encore une fois, pour briser cela, vous pouvez ajouter / supprimer du balisage supplémentaire à votre code HTML, périodiquement et au hasard, par exemple. l'ajout de div
s ou span
s supplémentaires . Avec le traitement HTML côté serveur moderne, cela ne devrait pas être trop difficile.
Choses à savoir:
Il sera fastidieux et difficile à mettre en œuvre, à maintenir et à déboguer.
Vous gênerez la mise en cache. Surtout si vous changez les identifiants ou les classes de vos éléments HTML, cela nécessitera des changements correspondants dans vos fichiers CSS et JavaScript, ce qui signifie que chaque fois que vous les changez, ils devront être téléchargés à nouveau par le navigateur. Cela se traduira par des temps de chargement de page plus longs pour les visiteurs réguliers et une charge de serveur accrue. Si vous ne le changez qu'une fois par semaine, ce ne sera pas un gros problème.
Des grattoirs intelligents pourront toujours obtenir votre contenu en déduisant où se trouve le contenu réel, par exemple. en sachant qu'un grand bloc de texte unique sur la page est susceptible d'être l'article réel. Cela permet de toujours trouver et extraire les données souhaitées de la page. Boilerpipe fait exactement cela.
Essentiellement, assurez-vous qu'il n'est pas facile pour un script de trouver le contenu réel souhaité pour chaque page similaire.
Voir aussi Comment empêcher les robots d'exploration en fonction de XPath d'obtenir le contenu de la page pour plus de détails sur la façon dont cela peut être implémenté en PHP.
Modifiez votre code HTML en fonction de l'emplacement de l'utilisateur
C'est un peu similaire à l'astuce précédente. Si vous servez du code HTML différent en fonction de l'emplacement / du pays de votre utilisateur (déterminé par l'adresse IP), cela peut casser les grattoirs qui sont livrés aux utilisateurs. Par exemple, si quelqu'un écrit une application mobile qui érafle les données de votre site, cela fonctionnera bien au début, mais s'arrêtera lorsqu'elle sera réellement distribuée aux utilisateurs, car ces utilisateurs peuvent se trouver dans un pays différent, et ainsi obtenir un HTML différent, que le le grattoir intégré n'a pas été conçu pour consommer.
Changez fréquemment votre HTML, vissez activement les grattoirs en le faisant!
Un exemple: vous avez une fonction de recherche sur votre site Web, située à example.com/search?query=somesearchquery
, qui renvoie le code HTML suivant:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
Comme vous l'avez peut-être deviné, c'est facile à gratter: tout ce qu'un grattoir doit faire est d'appuyer sur l'URL de recherche avec une requête et d'extraire les données souhaitées du code HTML renvoyé. En plus de changer périodiquement le HTML comme décrit ci-dessus, vous pouvez également laisser l'ancien balisage avec les anciens identifiants et classes, le masquer avec CSS et le remplir de fausses données, empoisonnant ainsi le grattoir. Voici comment modifier la page des résultats de recherche:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
Cela signifie que les grattoirs écrits pour extraire des données du HTML en fonction des classes ou des ID continueront de fonctionner, mais ils obtiendront de fausses données ou même des publicités, des données que les vrais utilisateurs ne verront jamais, car elles sont cachées avec CSS.
Vissez avec le grattoir: insérez de fausses données de pot de miel invisibles dans votre page
En plus de l'exemple précédent, vous pouvez ajouter des éléments de pot de miel invisibles à votre code HTML pour attraper les grattoirs. Un exemple qui pourrait être ajouté à la page de résultats de recherche décrite précédemment:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
Un grattoir écrit pour obtenir tous les résultats de la recherche le récupérera, tout comme les autres résultats de recherche réels sur la page, et visitera le lien, à la recherche du contenu souhaité. Un vrai humain ne le verra jamais en premier lieu (car il est caché avec CSS) et ne visitera pas le lien. Une araignée authentique et souhaitable comme celle de Google ne visitera pas le lien non plus parce que vous avez refusé /scrapertrap/
dans votre robots.txt.
Vous pouvez faire scrapertrap.php
quelque chose comme bloquer l'accès à l'adresse IP qui l'a visitée ou forcer un captcha pour toutes les demandes ultérieures de cette IP.
N'oubliez pas de désactiver votre pot de miel ( /scrapertrap/
) dans votre fichier robots.txt afin que les robots des moteurs de recherche n'y tombent pas.
Vous pouvez / devez combiner cela avec l'astuce précédente de modification fréquente de votre code HTML.
Changez aussi fréquemment, car les grattoirs apprendront finalement à l'éviter. Modifiez l'URL et le texte du pot de miel. Vous souhaitez également envisager de modifier le CSS intégré utilisé pour le masquage, et utiliser un attribut ID et un CSS externe à la place, car les grattoirs apprendront à éviter tout ce qui a un style
attribut avec CSS utilisé pour masquer le contenu. Essayez également de ne l'activer que parfois, afin que le grattoir fonctionne initialement, mais se casse après un certain temps. Cela vaut également pour le conseil précédent.
Les personnes malveillantes peuvent empêcher l'accès aux vrais utilisateurs en partageant un lien vers votre pot de miel, ou même en incorporant ce lien quelque part sous forme d'image (par exemple sur un forum). Modifiez fréquemment l'URL et raccourcissez les délais d'interdiction.
Servez des données fausses et inutiles si vous détectez un grattoir
Si vous détectez ce qui est évidemment un grattoir, vous pouvez fournir des données fausses et inutiles; cela corrompra les données que le racleur obtient de votre site Web. Vous devez également empêcher de distinguer ces fausses données des vraies données, afin que les grattoirs ne sachent pas qu'ils sont foutus.
À titre d'exemple: vous avez un site Web d'actualités; si vous détectez un grattoir, au lieu de bloquer l'accès, servez de faux articles générés de manière aléatoire , ce qui empoisonnera les données que le grattoir obtient. Si vous rendez vos fausses données indiscernables de la vraie chose, vous aurez du mal à ce que les gratteurs obtiennent ce qu'ils veulent, à savoir les vraies données réelles.
N'accepte pas les demandes si l'agent utilisateur est vide / manquant
Souvent, les gratteurs écrits paresseusement n'enverront pas d'en-tête d'agent utilisateur avec leur demande, contrairement à tous les navigateurs ainsi qu'aux araignées des moteurs de recherche.
Si vous obtenez une demande où l'en-tête de l'agent utilisateur n'est pas présent, vous pouvez afficher un captcha, ou simplement bloquer ou limiter l'accès. (Ou servez de fausses données comme décrit ci-dessus, ou autre chose ..)
Il est trivial d'usurper, mais comme mesure contre les grattoirs mal écrits, cela vaut la peine d'être mis en œuvre.
N'acceptez pas les demandes si l'agent utilisateur est un grattoir courant; liste noire celles utilisées par les grattoirs
Dans certains cas, les grattoirs utiliseront un agent utilisateur qu'aucun véritable navigateur ou moteur de recherche spider n'utilise, comme:
- "Mozilla" (Juste ça, rien d'autre. J'ai vu quelques questions sur le grattage ici, en utilisant ça. Un vrai navigateur ne l'utilisera jamais seulement)
- "Java 1.7.43_u43" (Par défaut, HttpUrlConnection de Java utilise quelque chose comme ça.)
- "BIZCO EasyScraping Studio 2.0"
- "wget", "curl", "libcurl", .. (Wget et cURL sont parfois utilisés pour le grattage de base)
Si vous constatez qu'une chaîne d'agent utilisateur spécifique est utilisée par les grattoirs de votre site et qu'elle n'est pas utilisée par de vrais navigateurs ou araignées légitimes, vous pouvez également l'ajouter à votre liste noire.
S'il ne demande pas d'actifs (CSS, images), ce n'est pas un vrai navigateur.
Un vrai navigateur demandera (presque toujours) et téléchargera des ressources telles que des images et du CSS. Les analyseurs et les grattoirs HTML ne le seront pas car ils ne sont intéressés que par les pages réelles et leur contenu.
Vous pouvez consigner les demandes dans vos actifs, et si vous voyez beaucoup de demandes uniquement pour le HTML, cela peut être un grattoir.
Attention, les robots des moteurs de recherche, les anciens appareils mobiles, les lecteurs d'écran et les appareils mal configurés ne peuvent pas non plus demander d'actifs.
Utiliser et exiger des cookies; utilisez-les pour suivre les actions des utilisateurs et des grattoirs.
Vous pouvez exiger l'activation des cookies pour visualiser votre site Web. Cela dissuadera les rédacteurs de grattoirs inexpérimentés et débutants, mais il est facile pour un grattoir d'envoyer des cookies. Si vous les utilisez et en avez besoin, vous pouvez suivre les actions des utilisateurs et des grattoirs avec eux, et ainsi implémenter la limitation de débit, le blocage ou l'affichage des captchas par utilisateur plutôt que par IP.
Par exemple: lorsque l'utilisateur effectue une recherche, définissez un cookie d'identification unique. Lorsque les pages de résultats sont affichées, vérifiez ce cookie. Si l'utilisateur ouvre tous les résultats de la recherche (vous pouvez le voir à partir du cookie), c'est probablement un grattoir.
L'utilisation de cookies peut être inefficace, car les grattoirs peuvent également envoyer les cookies avec leurs demandes et les supprimer au besoin. Vous empêcherez également l'accès pour les utilisateurs réels qui ont désactivé les cookies, si votre site ne fonctionne qu'avec des cookies.
Notez que si vous utilisez JavaScript pour définir et récupérer le cookie, vous bloquerez les grattoirs qui n'exécutent pas JavaScript, car ils ne peuvent pas récupérer et envoyer le cookie avec leur demande.
Utilisez JavaScript + Ajax pour charger votre contenu
Vous pouvez utiliser JavaScript + AJAX pour charger votre contenu après le chargement de la page elle-même. Cela rendra le contenu inaccessible aux analyseurs HTML qui n'exécutent pas JavaScript. C'est souvent un moyen de dissuasion efficace pour les débutants et les programmeurs inexpérimentés qui écrivent des grattoirs.
Soyez conscient de:
L'utilisation de JavaScript pour charger le contenu réel dégradera l'expérience utilisateur et les performances
Les moteurs de recherche peuvent ne pas exécuter JavaScript non plus, ce qui les empêche d'indexer votre contenu. Cela peut ne pas être un problème pour les pages de résultats de recherche, mais peut l'être pour d'autres choses, telles que les pages d'articles.
Obscurcissez votre balisage, les demandes de réseau à partir de scripts et tout le reste.
Si vous utilisez Ajax et JavaScript pour charger vos données, masquez les données qui sont transférées. Par exemple, vous pouvez encoder vos données sur le serveur (avec quelque chose d'aussi simple que base64 ou plus complexe), puis les décoder et les afficher sur le client, après avoir récupéré via Ajax. Cela signifie que quelqu'un qui inspecte le trafic réseau ne verra pas immédiatement comment votre page fonctionne et charge les données, et il sera plus difficile pour quelqu'un de demander directement les données de demande à vos points de terminaison, car ils devront procéder à une rétro-ingénierie de votre algorithme de désembrouillage.
Si vous utilisez Ajax pour charger les données, vous devez rendre difficile l'utilisation des points de terminaison sans charger d'abord la page, par exemple en exigeant une clé de session comme paramètre, que vous pouvez intégrer dans votre JavaScript ou votre HTML.
Vous pouvez également incorporer vos données obscurcies directement dans la page HTML initiale et utiliser JavaScript pour les désobfusquer et les afficher, ce qui éviterait les demandes réseau supplémentaires. Cela rendra considérablement plus difficile l'extraction des données à l'aide d'un analyseur HTML uniquement qui n'exécute pas JavaScript, car celui qui écrit le scraper devra inverser l'ingénierie de votre JavaScript (que vous devriez également obscurcir).
Vous voudrez peut-être changer vos méthodes d'obscurcissement régulièrement, pour briser les grattoirs qui l'ont compris.
Il y a cependant plusieurs inconvénients à faire quelque chose comme ça:
Il sera fastidieux et difficile à mettre en œuvre, à maintenir et à déboguer.
Il sera inefficace contre les grattoirs et les grattoirs qui exécutent réellement JavaScript puis extraient les données. (La plupart des analyseurs HTML simples n'exécutent pas JavaScript cependant)
Cela rendra votre site non fonctionnel pour les vrais utilisateurs s'ils ont désactivé JavaScript.
Les performances et les temps de chargement des pages en souffriront.
Non technique:
Dites aux gens de ne pas gratter, et certains le respecteront
Trouvez un avocat
Rendez vos données disponibles, fournissez une API:
Vous pouvez rendre vos données facilement disponibles et exiger une attribution et un lien vers votre site. Peut-être facturer $$$ pour cela.
Divers:
Il existe également des services commerciaux de protection contre le grattage, tels que l'anti-grattage par Cloudflare ou Distill Networks (Détails sur la façon dont cela fonctionne ici ), qui font ces choses, et plus pour vous.
Trouvez un équilibre entre la convivialité pour les utilisateurs réels et la résistance aux grattages: tout ce que vous faites aura un impact négatif sur l'expérience utilisateur d'une manière ou d'une autre, trouvez des compromis.
N'oubliez pas votre site mobile et vos applications. Si vous disposez d'une application mobile, celle-ci peut également être économisée et le trafic réseau peut être inspecté pour déterminer les points de terminaison REST qu'elle utilise.
Les grattoirs peuvent gratter d'autres grattoirs: s'il existe un site Web dont le contenu est gratté du vôtre, d'autres grattoirs peuvent gratter le site Web de ce grattoir.
Lectures complémentaires: