Comment puis-je empêcher le raclage du site? [fermé]

j'ai un site de musique assez grand avec une grande base de données d'artistes. J'ai remarqué que d'autres sites de musique effaçaient les données de notre site (j'entre des noms d'artistes fictifs ici et là et je fais des recherches sur google pour les trouver).

Comment puis-je empêcher le raclage de l'écran? Est-il même possible?

264
demandé sur Paul Sweatte 2010-07-02 00:49:04

26 réponses

Note: puisque la version complète de cette réponse dépasse la limite de longueur de la pile, vous aurez besoin de tête à GitHub pour lire la version étendue, avec plus de conseils et de détails.


afin d'empêcher le raclage (également connu sous le nom de Webscraping , Screenscraping , Web data mining , "1519330920 Web" récolte , ou Web de données extraction ), il est utile de savoir comment ces grattoirs de travail, et par extension, ce qui l'empêche de travailler.

il y a différents types de racleurs, et chacun fonctionne différemment:

  • araignées, telles que bot de Google ou copieurs de site Web comme Htrack , qui récursivement suivre les liens vers d'autres pages pour obtenir les données. Ceux-ci sont parfois utilisés pour le raclage ciblé pour obtenir des données spécifiques, souvent en combinaison avec un analyseur HTML pour extraire les données désirées de chaque page.

  • scripts Shell: parfois, des outils Unix communs sont utilisés pour racler: wget ou Curl pour télécharger des pages, et Grep (Regex) pour extraire les données.

  • parseurs HTML, tels que ceux basés sur Jsoup, Scrapy , et autres. Tout comme les scripts shell basés sur regex, ceux-ci fonctionnent en extrayant des données à partir de pages basées sur des motifs HTML, ignorant généralement tout le reste.

    par exemple: si votre site Web a une fonction de recherche, un tel grattoir pourrait soumettre une demande de recherche, puis obtenir tous les liens de résultats et leurs titres à partir de la page des résultats HTML, afin d'obtenir spécifiquement que les liens de résultats de recherche et leurs titres. Ce sont les plus commun.

  • Screenscrapers, basé sur, par exemple. Selenium ou PhantomJS , qui ouvrent votre site Web dans un navigateur réel, exécuter JavaScript, AJAX, et ainsi de suite, et puis obtenir le texte désiré à partir de la page web, généralement par:

    • obtenir le HTML du navigateur après que votre page a été chargée et JavaScript a couru, et ensuite en utilisant un analyseur HTML pour extraire le de données de votre choix. Ce sont les plus communs, et donc beaucoup de méthodes pour briser parsers HTML / scrapers travaillent aussi ici.

    • prise d'une capture d'écran des pages rendues, puis en utilisant OCR pour extraire le texte désiré de la capture d'écran. Elles sont rares et uniquement dédié grattoirs qui veulent vraiment vos données.

  • Webscraping des services tels que ScrapingHub ou Kimono . En fait, il ya des gens dont le travail est de comprendre comment racler votre site et tirer le contenu pour les autres à utiliser.

    sans surprise, les services professionnels de raclage sont les plus difficiles à dissuader, mais si vous rendez difficile et long de comprendre comment racler votre site, ceux-ci (et les gens qui les paient pour le faire) peuvent ne pas être pris la peine de racler votre site.

  • intégrer votre site Web dans les pages d'autres sites avec frames , et intégrer votre site dans les applications mobiles.

    bien que techniquement pas racler, les applications mobiles (Android et iOS) peuvent intégrer des sites Web, et injecter CSS personnalisé et JavaScript, donc changer 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 racleurs, et de nombreux racleurs se comporteront de la même façon, même s'ils utilisent des technologies et des méthodes différentes.

ces conseils la plupart du temps mes propres idées, diverses difficultés que j'ai rencontrées en écrivant scrapers, ainsi que des bouts d'information et des idées autour des interwebs.

comment arrêter de gratter

Vous ne pouvez pas empêcher complètement , car quoi que vous fassiez, déterminé grattoirs pouvez toujours comprendre comment gratter. Cependant, vous pouvez arrêter beaucoup de grattage en faisant quelques choses:

Surveiller vos journaux et les modèles de trafic; limiter l'accès si vous voyez une activité inhabituelle:

Vérifiez vos journaux régulièrement, et en cas d'activité inhabituelle indicative d'accès automatisé (racleurs), tels que de nombreuses actions similaires de la même adresse IP, vous pouvez bloquer ou limiter l'accès.

spécifiquement, quelques idées:

  • taux limite:

    permet seulement aux utilisateurs (et aux gratteurs) d'effectuer un nombre limité d'actions dans un certain temps - par exemple, n'autorise 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 pourriez aussi montrer un captcha si les actions sont effectuées trop rapidement ou plus rapidement qu'un utilisateur réel ne le ferait.

  • "détecter une activité inhabituelle:

    si vous voyez une activité inhabituelle, comme de nombreuses requêtes similaires à partir d'une adresse IP spécifique, quelqu'un regardant un nombre excessif de pages ou effectuant un nombre inhabituel de recherches, Vous pouvez empêcher l'accès, ou afficher un captcha pour les requêtes ultérieures.

  • ne vous contentez pas de surveiller et de limiter le débit par adresse IP - utilisez d'autres indicateurs aussi:

    si vous faites un blocage ou une limite de taux, ne le faites pas simplement sur la base d'une adresse IP; vous pouvez utiliser d'autres indicateurs et méthodes pour identifier des utilisateurs ou des racleurs spécifiques. Voici quelques indicateurs qui peuvent vous aider à identifier des utilisateurs / gratteurs spécifiques:

    • comment les utilisateurs remplissent les formulaires rapidement, et où sur un bouton ILS cliquez sur;

    • vous pouvez rassembler beaucoup d'informations avec JavaScript, telles que la taille de l'écran / résolution, fuseau horaire, polices installées, etc; Vous pouvez utiliser cela pour identifier les utilisateurs.

    • en-têtes HTTP et leur ordre, en particulier User-Agent.

    à titre d'exemple, si vous recevez de nombreuses requêtes à partir d'une seule adresse IP, toutes en utilisant le même Agent utilisateur, la taille de l'écran (déterminé 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 screen scraper; et vous pouvez temporairement bloquer des requêtes similaires (par exemple: bloquez toutes les requêtes avec cet agent utilisateur et la taille de l'écran provenant de cette adresse IP particulière), et de cette façon vous ne gênerez pas les utilisateurs réels sur cette adresse IP, par exemple. dans le cas d'une connexion internet partagée.

    vous pouvez aussi aller plus loin, car vous peut identifier des requêtes similaires, même si elles proviennent d'adresses IP différentes, indicatives d'un raclage distribué (un racleur utilisant un botnet ou un réseau de mandataires). Si vous recevez beaucoup de requêtes par ailleurs identiques, mais qu'elles proviennent d'adresses IP différentes, vous pouvez les bloquer. Encore une fois, soyez conscient de ne pas bloquer par inadvertance les utilisateurs réels.

    cela peut être efficace contre les screenscrapers qui exécutent JavaScript, comme vous pouvez obtenir beaucoup d'informations de leur part.

    questions connexes sur L'échange de la pile de sécurité:

  • au lieu de bloquer temporairement l'accès, utilisez un Captcha:

    la façon simple de mettre en oeuvre la restriction tarifaire serait de bloquer temporairement l'accès pendant un certain temps, mais l'utilisation d'un Captcha peut être meilleure, voir la section sur captcha plus loin.

besoin d'un enregistrement et d'une connexion

Nécessitent la création de compte afin de visualiser votre contenu, si c'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 utilisateurs réels.

  • si vous avez besoin de créer un compte et d'ouvrir une session, vous pouvez suivre avec précision les actions des utilisateurs et des gratteurs. De cette façon, vous pouvez facilement détecter quand un compte est utilisé pour gratter, et de l'interdire. Des choses comme la limitation du taux ou la détection des abus (comme un grand nombre de recherches en peu de temps) deviennent plus faciles, car vous pouvez identifier des racleurs spécifiques à la place de juste les adresses IP.

afin d'éviter les scripts créant de nombreux comptes, vous devriez:

  • nécessitent une adresse e-mail pour l'enregistrement, et de vérifier cette adresse e-mail en envoyant un lien qui doit être ouvert afin d'activer le compte. N'autorisez qu'un seul compte par adresse e-mail.

  • nécessitent un captcha à résoudre lors de l'enregistrement / création de Compte.

le fait D'exiger la création de compte pour visualiser le contenu éloignera les utilisateurs et les moteurs de recherche; Si vous avez besoin de création de compte pour visualiser un article, les utilisateurs iront ailleurs.

Bloquer l'accès à partir d'hébergement cloud et de raclage du service des adresses IP

parfois, des racleurs seront gérés à partir de services d'hébergement web, tels que Amazon Web Services ou GAE, ou VPSes. Limiter l'accès à votre site web (ou de montrer un captcha) pour les requêtes 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 de VPN, car les gratteurs peuvent utiliser ces serveurs proxy pour éviter que de nombreuses requêtes ne soient détectées.

méfiez-vous qu'en bloquant l'accès à partir des serveurs mandataires et des VPN, vous affecterez négativement les utilisateurs réels.

faites en sorte que votre message d'erreur ne soit pas textuel si vous bloquez

si vous bloquez / limitez l'accès, vous devez vous assurer de ne pas dire au racleur ce qui a causé le bloc, leur donnant ainsi des indices sur la façon de réparer leur racleur. Donc une mauvaise idée serait de montrer des pages d'erreur avec du texte comme:

  • trop de demandes à partir de votre adresse IP, s'il vous plaît essayer à nouveau plus tard.

  • erreur, l'en-tête de L'Agent utilisateur n'est pas présent !

au lieu de cela, montrez un message d'erreur amical qui ne dit pas au racleur ce qui l'a causé. Quelque chose comme ceci 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 aussi beaucoup plus convivial pour les utilisateurs réels, devraient-ils jamais voir une page d'erreur. Vous devriez également envisager de montrer un captcha pour les demandes suivantes au lieu d'un bloc dur, dans le cas où un utilisateur réel voit le message d'erreur, de sorte que vous ne bloquez pas et ainsi amener les utilisateurs légitimes à vous contacter.

utilisez Captchas si vous soupçonnez qu'un grattoir accède à votre site web.

Captcha ("Complètement Automatisé de Test to Tell computers and humans apart") sont très efficaces contre l'arrêt de grattoirs. Malheureusement, ils sont aussi très efficaces à irriter les utilisateurs.

As ainsi, ils sont utiles lorsque vous soupçonnez un grattoir possible, et que vous voulez arrêter le raclage, sans bloquer l'accès au cas où il ne s'agit pas d'un grattoir mais d'un utilisateur réel. Vous pourriez envisager montrant un captcha avant de permettre l'accès au contenu si vous soupçonnez un grattoir.

choses à savoir lors de L'utilisation de Captchas:

  • ne roulez pas votre propre, utilisez quelque chose comme Google reCaptcha : c'est un beaucoup plus facile que d'implémenter un captcha vous-même, c'est plus convivial qu'une solution de texte flou et déformé que vous pourriez trouver vous-même (les utilisateurs n'ont souvent besoin de cocher qu'une case), et c'est aussi beaucoup plus difficile pour un scripteur à résoudre qu'une simple image servie à partir de votre site

  • Ne comprennent pas la solution pour le captcha dans le balisage HTML: en fait, j'ai vu un site qui a la solution pour le captcha dans la page se , (bien que très bien caché) ce qui le rend assez inutile. Ne pas faire quelque chose comme cela. Encore une fois, utilisez un service comme reCaptcha, et vous n'aurez pas ce genre de problème (si vous l'utilisez correctement).

  • Captcha peut être résolu en vrac: Il y a des captcha-services de résolution de problèmes où le réel, à faible rémunération, les humains résoudre 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 l'utilisateur dispose pour résoudre le captcha). Ce type de service est peu susceptible d'être utilisé à moins que vos données sont vraiment précieux.

servez votre contenu de texte comme une image

vous pouvez rendre le texte dans une image côté serveur, et servir que pour être affiché, ce qui empêchera les racleurs simples extraire le texte.

cependant, c'est mauvais pour les lecteurs d'écran, Les moteurs de recherche, la performance, et à peu près beaucoup tout le reste. Il est aussi illégal dans certains endroits (en raison de l'accessibilité, par exemple. The Americans with Disabilities Act), et il est aussi facile de le contourner avec une ROC, alors ne le faites pas.

vous pouvez faire quelque chose de similaire avec CSS sprites, mais qui souffre des mêmes problèmes.

Ne pas exposer vos données complètes:

si possible, ne pas fournir un moyen pour un script / bot pour obtenir tous vos ensembles de données. Un exemple: Vous avez une site de nouvelles, avec beaucoup d'articles individuels. Vous pouvez rendre ces articles accessibles seulement en les recherchant via la recherche sur le site, et, si vous n'avez pas une liste de tous les articles sur le site et leurs URLs n'importe où, ces articles ne seront accessibles qu'en utilisant la fonction de recherche. Cela signifie qu'un script qui veut obtenir tous les articles hors de votre site devra faire des recherches pour toutes les phrases possibles qui peuvent apparaître dans vos articles afin de trouver tous, ce qui prendra du temps, sera horriblement inefficace, et nous espérons que le racleur abandonnera.

ce sera inefficace si:

  • le bot / script ne veut pas / n'a pas besoin de l'ensemble complet de données de toute façon.
  • vos articles sont servis à partir d'une URL qui ressemble à quelque chose comme example.com/article.php?articleId=12345 . Cela (et des choses similaires) qui permettra aux racleurs de simplement itérer sur tous les articleId s et de demander tous les les articles de cette façon.
  • il y a d'autres moyens de trouver éventuellement tous les articles, comme en écrivant un script pour suivre les liens dans les articles qui mènent à d'autres articles.
  • chercher 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 retournant seulement les 10 ou 20 premiers résultats).
  • Vous avez besoin de moteurs de recherche pour trouver votre contenu.

Ne pas exposer votre Api, les systèmes d'extrémité, et autres choses semblables:

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 ne plaise!) pour charger vos données, il est trivial de regarder les requêtes réseau de la page et de comprendre où ces requêtes vont, puis d'inverser la conception et d'utiliser ces endpoints dans un programme scraper. Assurez-vous que vous obscurcissez vos paramètres et rendez-les difficiles à utiliser pour les autres, comme décrit.

Pour dissuader les analyseurs HTML et des grattoirs:

comme les parseurs HTML fonctionnent en extrayant du contenu à partir de pages basées sur des motifs identifiables dans le HTML, nous pouvons intentionnellement changer ces motifs dans oder pour briser ces racloirs, ou même les visser. La plupart de ces conseils s'appliquent également à d'autres grattoirs comme les araignées et screenscrapers aussi.

Changez souvent votre HTML

Scrapers qui traitent HTML directement le font en extrayant des contenus 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 id de article-content , qui contient le texte de l'article, alors il est trivial d'écrire un script pour visiter toutes les pages de l'article sur votre site, et extraire le texte du contenu du article-content div sur chaque page d'article, et voilà, le racleur a tout les articles de votre site dans un format qui peut être réutilisé ailleurs.

si vous changez fréquemment le HTML et la structure de vos pages, ces racloirs ne fonctionneront plus.

  • vous pouvez souvent changer les id et les classes d'éléments dans votre HTML, peut-être même automatiquement. Donc, si votre div.article-content devient quelque chose comme div.a4c36dda13eaf0 , et change chaque semaine, le racleur fonctionnera très bien au départ, mais pause après une semaine. Assurez-vous de changer la longueur de vos ids / classes aussi, sinon le racleur utilisera div.[any-14-characters] pour trouver le div désiré à la place. Méfiez-vous des autres trous similaires aussi..

  • S'il n'y a aucun moyen de trouver le contenu désiré à partir du markup, le scraper le fera à partir de la façon dont le HTML est structuré. Donc, si toutes vos pages d'article sont similaires en ce que chaque div à l'intérieur d'un div qui vient après un h1 est le contenu de l'article, des grattoirs obtiendrez le contenu de l'article. Encore une fois, pour casser cela, vous pouvez ajouter / supprimer un markup supplémentaire à votre HTML, périodiquement et au hasard, par exemple. ajout de div s ou span s supplémentaires. Avec le traitement HTML côté serveur moderne, cela ne devrait pas être trop difficile.

les choses à savoir:

  • il sera fastidieux et difficile à mettre en œuvre, maintenir, et de débogage.

  • vous gênerez la mise en cache. Surtout si vous changez d'ID ou de classe de vos éléments HTML, cela nécessitera des modifications correspondantes dans vos fichiers CSS et JavaScript, ce qui signifie que chaque fois que vous les modifiez, ils devront être rechargés par le navigateur. Il en résultera des temps de chargement de page plus longs pour les visiteurs répétés, et une charge de serveur accrue. Si vous ne le changer une fois par semaine, il ne sera pas un gros problème.

  • Intelligent grattoirs sera toujours en mesure d'obtenir votre contenu en déduire où le contenu réel est, par exemple. en sachant qu'un seul gros bloc de texte sur la page est susceptible d'être le véritable article. Cela permet de toujours trouver et extraire les données de la page. Boilerpipe fait exactement cela.

Essentiellement, assurez-vous qu'il n'est pas facile pour un script pour trouver le contenu réel, désiré pour chaque page similaire.

Voir aussi Comment empêcher les robots d'indexation en fonction XPath obtenir à partir du contenu de la page pour plus de détails sur la façon dont cela peut être implémenté en PHP.

changez votre HTML en fonction de l'emplacement de l'utilisateur

c'est un peu similaire à la pointe précédente. Si vous utilisez un HTML différent en fonction de l'emplacement / du pays de votre utilisateur (déterminé par L'IP adresse), cela peut casser les racleurs qui sont livrés aux utilisateurs. Par exemple, si quelqu'un écrit une application mobile qui gratte des données de votre site, il fonctionnera très bien au départ, mais se casse quand il est réellement distribué aux utilisateurs, car ces utilisateurs peuvent être dans un pays différent, et donc obtenir un HTML différent, que le racleur intégré n'a pas été conçu pour consommer.

changez souvent votre HTML, vissez activement les racleurs en faisant ainsi !

An exemple: vous avez une fonction de recherche sur votre site web, situé à example.com/search?query=somesearchquery , qui renvoie le 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 de frapper L'URL de recherche avec une requête, et extraire les données désirées à partir du HTML retourné. En plus de changer périodiquement le HTML comme décrit ci-dessus, vous pouvez aussi laisser le vieux markup avec les anciennes ID et classes dans, le cacher avec CSS, et le remplir avec de fausses données, empoisonnant ainsi le grattoir. Voici comment la page des résultats de la recherche a pu être changée:

<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 signifiera que les gratteurs écrits pour extraire des données du HTML basé sur les classes ou les IDs continueront apparemment à fonctionner, mais ils obtiendront de fausses données ou même des annonces, données que les utilisateurs réels ne verront jamais, car ils sont cachés avec CSS.

vis avec le racleur: insérez des données fausses, invisibles honeypot dans votre page

en ajoutant à l'exemple précédent, vous pouvez ajouter des éléments honeypot invisibles à votre HTML pour attraper les racleurs. Un exemple qui pourrait être ajouté à la page des résultats de recherche décrits 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 scraper écrit pour obtenir tous les résultats de recherche va ramasser ce, comme l'un des autres, résultats de recherche réels sur la page, et de visiter le lien, à la recherche du contenu désiré. Un vrai homme ne sera plus jamais le voir en premier lieu (en raison de cela étant caché avec CSS), et ne va pas visiter le lien. Une araignée authentique et désirable comme celle de Google ne visitera pas le lien non plus parce que vous avez refusé /scrapertrap/ dans vos robots.txt.

vous pouvez faire votre scrapertrap.php faire quelque chose comme bloquer l'accès pour l'adresse IP qui l'a visité ou forcer un captcha pour toutes les demandes ultérieures à partir de cette adresse IP.

  • N'oubliez pas de rejeter votre chèvrefeuille ( /scrapertrap/ ) dans vos robots.le fichier txt pour que les bots de moteur de recherche ne tombent pas dedans.

  • vous pouvez / devez combiner cela avec le conseil précédent de changer votre HTML fréquemment.

  • changez cela aussi fréquemment, car les racleurs apprendront éventuellement à l'éviter. Changez L'URL du pot de miel et le texte. Je veux également envisager de changer le CSS interne utilisé pour se cacher, et utiliser un attribut ID et CSS externe à la place, comme les gratteurs apprendront à éviter tout ce qui a un attribut style avec CSS utilisé pour cacher le contenu. Aussi essayer seulement l'activer parfois, de sorte que le racleur fonctionne d'abord, mais se casse après un certain temps. Ceci s'applique également pour l'astuce précédente.

  • les personnes malveillantes peuvent empêcher l'accès pour les utilisateurs réels en partageant un lien vers votre pot de miel, ou même en intégrant ce lien quelque part comme une image (par exemple. sur un forum). Changer l'URL fréquemment, et faire une interdiction temps relativement court.

servir des données fausses et inutiles si vous détectez un racleur

si vous détectez ce qui est évidemment un racleur, vous pouvez servir des données fausses et inutiles; cela corrompra les données que le racleur obtient de votre site web. Vous devriez également rendre impossible de distinguer ces fausses données des données réelles, de sorte que les gratteurs ne savent pas qu'ils sont foutus avec.

comme exemple: vous avoir un site de nouvelles; si vous détectez un racleur, au lieu de bloquer l'accès, servir jusqu'à faux, produit au hasard articles, et cela empoisonnera les données que le racleur obtient. Si vous rendez vos fausses données impossibles à distinguer de la vraie chose, vous rendrez difficile pour les gratteurs d'obtenir ce qu'ils veulent, à savoir les données réelles, réelles.

N'accepte pas les requêtes si le mandataire utilisateur est vide /manquant

racloirs souvent écrits paresseusement n'enverra pas un en-tête D'Agent utilisateur avec leur demande, alors que tous les navigateurs ainsi que les araignées de moteur de recherche le feront.

si vous obtenez une requête où l'en-tête User Agent n'est pas présent, vous pouvez afficher un captcha, ou simplement bloquer ou limiter l'accès. (Ou servir de fausses données comme décrit ci-dessus, ou autre chose..)

il est trivial de spoof, mais comme mesure contre les gratteurs mal écrits, il est intéressant de mettre en œuvre.

N'accepte pas demande si L'Agent utilisateur est un racleur commun; liste noire utilisés par les racleurs

dans certains cas, les gratteurs utiliseront un Agent utilisateur qu'aucun véritable navigateur ou moteur de recherche spider n'utilise, tel que:

  • "Mozilla" (rien d'autre. J'ai vu quelques questions sur le raclage ici, en utilisant ça. Un vrai navigateur ne sera jamais utiliser uniquement)
  • " Java 1.7.43_u43" (par défaut, la connexion HttpUrlConnection de Java utilise quelque chose pareil.)
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl",.. (Wget et cURL sont parfois utilisés pour la base de grattage)

si vous trouvez qu'une chaîne D'Agent utilisateur spécifique est utilisée par des grattoirs sur votre site, et qu'elle n'est pas utilisée par des navigateurs réels ou des araignées légitimes, vous pouvez également l'ajouter à votre liste noire.

S'il ne demande pas de biens (CSS, images), il n'est pas un réel navigateur.

un navigateur réel va (presque toujours) demander et télécharger des ressources telles que des images et des CSS. Les analyseurs HTML et les racleurs ne seront pas car ils sont seulement intéressés par les pages réelles et leur contenu.

vous pouvez enregistrer les requêtes à votre actif, et si vous voyez beaucoup de requêtes pour seulement le HTML, il peut être un grattoir.

méfiez-vous que les bots de moteur de recherche, les appareils mobiles antiques, les lecteurs d'écran et les appareils mal configurés peuvent pas de demande de biens.

utiliser et exiger des cookies; les utiliser pour suivre les actions de l'utilisateur et racleur.

vous pouvez exiger que des cookies soient activés afin de visualiser votre site web. Cela dissuadera les rédacteurs débutants et inexpérimentés de scraper, mais il est facile pour un scraper d'envoyer des cookies. Si vous les utilisez et que vous en avez besoin, vous pouvez suivre les actions des utilisateurs et des racleurs avec eux, et ainsi mettre en œuvre la limitation de vitesse, le blocage, ou l'affichage de captchas sur un utilisateur par au lieu d'un par-IP.

par exemple: lorsque l'utilisateur effectue une recherche, définissez un cookie d'identification unique. Lorsque les pages de résultats sont visualisées, vérifiez ce cookie. Si l'utilisateur ouvre tous les résultats de recherche (vous pouvez le dire à partir du cookie), alors il est probablement un grattoir.

utiliser des cookies peut être inefficace, car les gratteurs peuvent envoyer les cookies avec leurs demandes aussi, et les jeter si nécessaire. Vous aurez également empêcher l'accès pour les utilisateurs qui ont les cookies désactivés, si votre site ne fonctionne qu'avec les cookies.

notez que si vous utilisez JavaScript pour configurer et récupérer le cookie, vous bloquerez les scrapers qui ne fonctionnent 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 au HTML les analyseurs qui n'exécutent pas JavaScript. Ceci est souvent un moyen de dissuasion efficace pour les programmeurs débutants et inexpérimentés qui écrivent des gratteurs.

attention à:

  • l'utilisation de JavaScript pour charger le contenu réel dégradera l'expérience de l'utilisateur et la performance

  • les moteurs de recherche ne peuvent pas non plus utiliser JavaScript, 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-être pour d'autres choses, telles que les pages de l'article.

obscurcissez votre balisage, les requêtes réseau des scripts, et tout le reste.

si vous utilisez Ajax et JavaScript pour charger vos données, obscurcissez 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 aller chercher via Ajax. Cela signifiera 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 des données de requête à partir de vos points d'extrémité, car ils devront inverser votre algorithme de décryptage.

  • comme paramètre, que vous pouvez intégrer dans votre JavaScript ou votre HTML.

  • vous pouvez également intégrer vos données obscurcies directement dans la page HTML initiale et utiliser JavaScript pour les désobuser et les afficher, ce qui éviterait les requêtes réseau supplémentaires. Ce faisant, il sera beaucoup plus difficile d'extraire les données à l'aide D'un analyseur HTML qui n'exécute pas JavaScript, car celui qui écrit le scraper devra inverser votre JavaScript. (que vous devriez obscurcir aussi).

  • vous voudrez peut-être changer vos méthodes d'obfuscation régulièrement, pour briser les gratteurs qui l'ont compris.

il y a plusieurs inconvénients à faire quelque chose comme cela, bien que:

  • ce sera fastidieux et difficile à mettre en œuvre, à maintenir et à déboguer.

  • il sera inefficace contre les racleurs et screenscrapers qui fonctionnent effectivement JavaScript et puis extraire les données. (Les parsers HTML les plus simples ne fonctionnent pas JavaScript cependant)

  • cela rendra votre site non fonctionnel pour les utilisateurs réels s'ils ont Javascript désactivé.

  • les performances et les temps de chargement des pages en souffriront.

Non Technique:

  • "Dites aux gens de ne pas gratter, et certains le respecteront

  • trouver un avocat

  • rendre vos données disponibles, fournir une API:

    Vous pourriez faire vos données facilement disponibles et nécessitent l'attribution et un lien vers votre site. Peut-être facturer $$$ pour ça.

Divers:

  • il existe également des services commerciaux de protection contre le raclage, tels que L'anti-raclage par Cloudflare ou Distill Networks (détails sur la façon dont cela fonctionne ici ), qui font ces choses, et plus pour vous.

  • trouver un équilibre entre la facilité d'utilisation pour les utilisateurs réels et la résistance au raclage: Tout ce que vous faites aura un impact sur l'expérience de l'utilisateur négativement, d'une manière ou d'une autre, trouver des compromis.

  • N'oubliez pas votre site mobile et vos applications. Si vous avez une application mobile, qui peut être screenscraped aussi, et le trafic réseau peut être inspecté pour déterminer les points D'extrémité de repos qu'il utilise.

  • les racleurs peuvent racler d'autres racleurs: S'il y a un site web dont le contenu est raclé du vôtre, d'autres racleurs peuvent racler du site web de ce racleur.

autre lecture:

262
répondu JonasCz 2017-10-01 22:51:03

je présume que vous avez mis en place robots.txt .

Comme d'autres l'ont mentionné, des grattoirs peut faux presque tous les aspects de leurs activités, et il est probablement très difficile d'identifier les demandes qui viennent des méchants.

je considérerais:

  1. mettre en place une page, /jail.html .
  2. interdit l'accès à la page dans robots.txt (ainsi les araignées respectueuses jamais de la visite).
  3. placez un lien sur une de vos pages, en le cachant avec CSS ( display: none ).
  4. Enregistrer les adresses IP des visiteurs /jail.html .

cela pourrait vous aider à identifier rapidement les requêtes des racleurs qui ne tiennent manifestement pas compte de votre robots.txt .

vous pourriez également vouloir faire de votre /jail.html un site web entier qui a le même, exact markup que les pages normales, mais avec de fausses données ( /jail/album/63ajdka , /jail/track/3aads8 , etc.). De cette façon, les mauvais racleurs ne seront pas alertés des "inputs inhabituels" jusqu'à ce que vous ayez la chance de les bloquer entièrement.

230
répondu Daniel Trebbien 2016-02-18 14:47:35

poursuivez-les.

Sérieusement: Si vous avez un peu d'argent, parlez-en à une bonne, belle, jeune avocat qui connaît son chemin autour de l'Internet. Tu pourrais vraiment faire quelque chose ici. Selon l'endroit où les sites sont basés, vous pouvez demander à un avocat de rédiger un cessez-le-feu ou son équivalent dans votre pays. Vous pourriez au moins faire peur aux bâtards.

Documentez l'insertion de vos valeurs fictives. Inscrire clairement les valeurs fictives (mais obscurément) pointez vers vous. Je pense que c'est une pratique courante avec les compagnies de annuaires téléphoniques, et ici en Allemagne, je pense qu'il y a eu plusieurs cas où des imitateurs se sont fait chopper à travers de fausses entrées qu'ils ont copiées 1:1.

ce serait une honte si cela vous poussait à gâcher votre code HTML, en faisant glisser vers le bas SEO, validité et autres choses (même si un système de templating qui utilise une structure HTML légèrement différente sur chaque demande pour des pages identiques pourrait déjà aider un lot contre les racleurs qui s'appuient toujours sur les structures HTML et les noms de classe/ID pour obtenir le contenu.)

les lois sur le droit d'auteur sont bonnes pour des cas comme celui-ci. Voler le travail honnête d'autres personnes pour gagner de l'argent est quelque chose que vous devriez être en mesure de combattre.

48
répondu Unicron 2016-02-02 17:18:19

il n'y a vraiment rien que vous puissiez faire pour l'empêcher complètement. Les racleurs peuvent simuler leur agent utilisateur, utiliser plusieurs adresses IP, etc. et apparaître comme un utilisateur normal. La seule chose que vous pouvez faire est de rendre le texte non disponible au moment où la page est chargée - le faire avec l'image, flash, ou le charger avec JavaScript. Cependant, les deux premières sont de mauvaises idées, et la dernière serait un problème d'accessibilité si JavaScript n'est pas activé pour certains de vos utilisateurs réguliers.

si ils sont absolument claquer votre site et rayer à travers toutes vos pages, vous pourriez faire une sorte de limitation de taux.

il y a quand même de l'espoir. Grattoirs comptons sur votre site des données dans un format cohérent. Si tu pouvais le randomiser d'une façon ou d'une autre, il pourrait casser leur racleur. Des choses comme changer L'ID ou les noms de classe des éléments de page sur chaque chargement, etc. Mais c'est beaucoup de travail à faire et je ne sais pas si ça vaut le coup. Et même alors, ils pourraient probablement s'en passer avec assez de dévouement.

33
répondu ryeguy 2016-02-18 12:24:23

fournit une API XML pour accéder à vos données; d'une manière simple à utiliser. Si les gens veulent vos données, ils vont l'obtenir, vous pourriez aussi bien aller tous dehors.

de cette façon, vous pouvez fournir un sous-ensemble de fonctionnalités d'une manière efficace, en s'assurant que, à tout le moins, les racleurs ne guzzle pas les requêtes HTTP et des quantités massives de bande passante.

alors tout ce que vous avez à faire est de convaincre les gens qui veulent vos données d'utiliser l'API. ;)

28
répondu Williham Totland 2010-07-01 21:01:50

Désolé, c'est très difficile à faire...

je suggère que vous leur demandiez poliment de ne pas utiliser votre contenu (si votre contenu est protégé par le droit d'auteur).

si c'est le cas et qu'ils ne l'enlèvent pas, vous pouvez prendre d'autres mesures et leur envoyer une lettre de cessez-le-feu .

généralement, tout ce que vous faites pour prévenir le raclage aura probablement un effet plus négatif, par exemple l'accessibilité, robots/spiders, etc.

21
répondu Lizard 2016-02-17 15:36:42

ok, comme tous les messages disent, Si vous voulez le rendre moteur de recherche facile alors les bots peuvent racler pour sûr.

mais vous pouvez encore faire quelques choses, et il peut être affectif pour 60-70% raclage bots.

faites un script de vérification comme ci-dessous.

si une adresse IP particulière est en visite très rapidement, puis après quelques visites (5-10) mettre son adresse IP + informations du navigateur dans un fichier ou une base de données.

le suivant étape

(ce serait un processus de fond et en cours d'exécution tout le temps ou prévu après quelques minutes.) Créer un autre script qui va continuer à vérifier ces adresses IP suspectes.

Cas 1. Si l'agent utilisateur est d'un moteur de recherche connu comme Google, Bing , Yahoo (vous pouvez trouver plus d'informations sur les agents utilisateurs en googlant il). Alors vous devez voir http://www.iplists.com/ . Cette liste et essayer de faire correspondre les modèles. Et si cela ressemble à un faux user-agent alors demander de remplir un CAPTCHA sur la prochaine visite. (Vous devez rechercher un peu plus sur les adresses IP bots. Je sais que c'est réalisable et aussi essayer whois de l'adresse IP. Il peut être utile.)

Cas 2. No user agent of a search bot: il suffit de demander de remplir un CAPTCHA lors de la prochaine visite.

12
répondu Arshdeep 2016-02-18 16:30:58

du point de vue technique: Il suffit de modéliser ce que Google fait lorsque vous les frappez avec trop de requêtes à la fois. Qui devrait mettre un terme à beaucoup de lui.

D'un point de vue juridique: On dirait que les données que vous publiez ne sont pas propriétaires. Ce qui veut dire que vous publiez des noms, des statistiques et d'autres informations qui ne peuvent pas être protégées par le droit d'auteur.

si tel est le cas, les scrapers ne violent pas le droit d'auteur en redistribuant vos informations sur nom de l'artiste etc. Cependant, ils peuvent violer le droit d'auteur quand ils chargent votre site dans la mémoire parce que votre site contient des éléments qui sont protégeables par le droit d'auteur (comme la mise en page, etc).

je recommande la lecture sur Facebook v. Power.com et voir les arguments utilisés par Facebook pour arrêter le screen scraping. Il y a de nombreuses façons légales que vous pouvez prendre pour essayer d'empêcher quelqu'un de gratter votre site web. Ils peuvent être ambitieux et imaginatifs. Parfois, les tribunaux acceptent les arguments. Parfois ils ne le font pas.

mais, en supposant que vous publiez des informations du domaine public qui ne sont pas protégeables comme des noms et des statistiques de base... vous devriez laisser tomber au nom de la liberté d'expression et des données ouvertes. C'est ce que le web est tout au sujet.

8
répondu dengeltrees 2011-03-13 09:34:03

choses qui pourraient fonctionner contre les racleurs débutants:

  • blocage IP
  • utiliser des lots d'ajax
  • vérifier l'en-tête de la demande de referer
  • qui requiert une connexion

les choses qui aideront en général:

  • changez votre mise en page chaque semaine
  • "151950920 les" robots".txt

des choses qui aideront mais qui feront que vos utilisateurs vous détesteront:

  • captcha
8
répondu pguardiario 2012-06-22 02:42:28

j'ai fait beaucoup de grattage web et résumé quelques techniques pour arrêter les gratteurs web sur mon blog basé sur ce que je trouve ennuyeux.

il s'agit d'un compromis entre vos utilisateurs et les racleurs. Si vous limitez IP, utilisez CAPTCHA, exigez login, etc, vous rendez comme difficile pour les racleurs. Mais cela peut également éloigner vos véritables utilisateurs.

8
répondu hoju 2012-10-16 00:21:34

réponse Tardive - et aussi cette réponse n'est probablement pas celui que vous voulez entendre...

moi-même déjà écrit beaucoup (beaucoup de dizaines) de différents spécialisés grattoirs d'extraction de données. (juste parce que j'aime la philosophie des "données ouvertes").

voici déjà de nombreux conseils dans d'autres réponses - maintenant, je vais jouer le rôle de l'avocat du diable et étendre et/ou corriger leur efficacité.

d'Abord:

  • si quelqu'un vraiment veut vos données
  • vous can't efficacement (techniquement) cacher vos données
  • si les données doivent être accessibles au public à vos "utilisateurs réguliers"

essayer d'utiliser certaines barrières techniques ne sont pas la peine des ennuis, causé:

  • à vos utilisateurs réguliers en aggravant leur expérience utilisateur
  • aux bots réguliers et accueillis (moteurs de recherche)
  • etc...

Plain HMTL - la manière la plus simple est de parcourir les pages HTML, avec une structure bien définie et des classes css. Par exemple: il suffit d'inspecter l'élément avec Firebug, et d'utiliser les bons Xpaths, et/ou CSS path dans mon racleur.

vous pouvez générer la structure HTML dynamiquement et aussi, vous pouvez générer dynamiquement les noms de classe CSS (et le CSS lui-même aussi) (par exemple en utilisant des noms de classe aléatoires) - mais

  • vous souhaitez présenter les informations à vos utilisateurs réguliers de manière cohérente
  • par exemple, encore une fois - il suffit d'analyser la structure de la page, une fois de plus pour l'installation de l'grattoir.
  • et il peut être fait automatiquement en analysant du " contenu déjà connu ""
    • une fois que quelqu'un sait déjà( par raclage plus tôt), par exemple:
    • qu'est-ce qui contient les informations à propos de "phil collins"
    • afficher assez la page "phil collins" et (automatiquement) analyser comment la page est structurée "aujourd'hui":)

Vous ne pouvez pas modifier la structure pour chaque réponse, parce que votre les utilisateurs vous hais. En outre, cela causera plus de problèmes pour vous (Entretien) pas pour le racleur. Le chemin XPath ou CSS peut être déterminé par le script de raclage automatiquement à partir du contenu connu.

Ajax - un peu plus dur au départ, mais accélère souvent le processus de raclage:) - pourquoi?

lors de l'analyse des requêtes et des réponses, je viens de configurer mon propre serveur mandataire (écrit en perl) et mon firefox l'utilise. De bien sûr, parce que c'est ma propre proxy - il est complètement caché - le serveur cible le voir comme navigateur habituel. (Donc, pas de X-Forwarded-for et de tels en-têtes). Basé sur les logs de proxy, mostly est possible de déterminer la "logique" des requêtes ajax, par exemple je pourrais sauter la plupart du raclage html, et juste utiliser les réponses ajax bien structurées (la plupart du temps dans le format JSON).

ainsi, le ajax n'aide pas beaucoup...

un peu plus compliqué sont des pages qui utilise beaucoup paniers de fonctions javascript .

il est ici possible d'utiliser deux méthodes de base:

  • déballer et comprendre le JS et créer un scraper qui suit la logique Javascript (la voie dure)
  • ou (en utilisant de préférence par moi-même) - il suffit d'utiliser Mozilla avec Mozrepl pour gratter. E. g. le réel le raclage est fait dans le navigateur JavaScript activé complet présenté, qui est programmé pour cliquer sur les bons éléments et de saisir les réponses "décodé" directement à partir de la fenêtre du navigateur.

un tel raclage est lent( le raclage est fait comme dans le navigateur régulier), mais il est

  • très facile à configurer et à utiliser
  • et il est presque impossible de le contrer :)
  • et le "la lenteur" est nécessaire de toute façon pour contrer le "blocage de la rapidité de la même IP, en fonction des demandes"

le User-Agent le filtrage basé n'aide pas du tout. Sérieux data-miner le mettra à certains correct dans son grattoir.

qui requiert une Connexion - n'a pas d'aide. La façon la plus simple de le battre (sans analyser et / ou Scripter le protocole de connexion) est juste la connexion dans le site en tant qu'Utilisateur régulier, en utilisant Mozilla et après viennent d'exécuter le racleur basé sur Mozrpl...

rappelez-vous, le require login aide pour les bots anonymes, mais n'aide pas contre quelqu'un qui veulent gratter vos données. Il vient de s'inscrire à votre site en tant qu'Utilisateur régulier.

utiliser des cadres n'est pas très efficace aussi. Il est utilisé par de nombreux services de cinéma en direct et il n'est pas très difficile à battre. Les cadres sont simplement une autre page HTML / Javascript ce qu'il faut pour l'analyser... Si les données valent les ennuis - le data-miner fera l'analyse nécessaire.

la limitation basée sur L'IP n'est pas efficace du tout-voici trop de serveurs mandataires publics et aussi voici le TOR... :) Il ne ralentit pas le raclage (pour quelqu'un qui vraiment veut vos données).

très difficile est de gratter des données cachées dans les images. (par exemple, conversion simple des données en images côté serveur). Employer "tesseract" (OCR) aide plusieurs fois - mais honnêtement - les données doivent valoir les ennuis pour le racleur. (que beaucoup de fois n'a pas de valeur).

de l'autre côté, vos utilisateurs vous déteste pour cela. Moi - même, (même si Je ne gratte pas) les sites Web de haine qui ne permet pas de copier le contenu de la page dans le presse-papiers (parce que les informations sont dans les images, ou (les stupides) essayer de se lier au clic droit quelque événement JavaScript personnalisé. :)

les plus difficiles sont les sites qui utilisent Java applets ou flash , et l'applet utilise secure https se demande en interne . Mais pensez à deux fois-comment heureux sera vos utilisateurs d'iPhone... ;). Par conséquent, à l'heure actuelle, très peu de sites les utilisent. Moi - même, bloquant tout le contenu flash dans mon navigateur (dans les sessions de navigation régulières) - et ne jamais utiliser des sites qui dépend de Flash.

vos jalons pourraient être... donc vous pouvez essayer cette méthode - rappelez - vous juste que vous aurez probablement perdre un peu de vos utilisateurs. Rappelez-vous également, certains fichiers SWF sont décompilables. ;)

Captcha (les bonnes comme reCaptcha) aide beaucoup - mais vos utilisateurs vous hais... - imaginez, comment vos utilisateurs vous aimeront quand ils auront besoin de résoudre quelques captchas dans toutes les pages montrant des informations sur les artistes de la musique.

probablement pas besoin de continuer - vous déjà entré dans l'image.

maintenant ce que vous devez faire:

rappelez-vous: il est presque impossible de cacher vos données, si vous de l'autre côté veulent les publier (de manière conviviale) à vos utilisateurs réguliers.

,

    • cela permet l'accès facile aux données
    • p.ex. décharger votre serveur de racler-bon pour vous
  • configurer les droits d'utilisation de droite (par exemple, doit citer la source)
  • rappelez-vous, de nombreuses données ne sont pas protégées par le droit d'auteur-et il est difficile de les protéger
  • ajouter quelques fausses données (comme vous l'avez déjà fait) et utiliser des outils juridiques
    • comme d'autres l'ont déjà dit, envoyer une "lettre de cesser et de s'abstenir"
    • autres actions en justice (sue et similaires) probablement est trop coûteux et difficile à gagner (en particulier contre les sites non américains)

réfléchissez à deux fois avant d'essayer d'utiliser certaines barrières techniques.

plutôt que d'essayer de bloquer les mineurs de données, il suffit d'ajouter plus d'efforts à la convivialité de votre site web. Votre utilisateur vous aime. Le temps (et l'énergie) investi dans les barrières techniques ne sont généralement pas la peine - mieux de passer le temps de faire encore meilleur site web...

De plus, les Voleurs de données ne sont pas comme les voleurs normaux.

si vous achetez une alarme bon marché à la maison et Ajouter un avertissement "Cette maison est liée à la police" - de nombreux voleurs ne tenteront même pas d'entrer par effraction. Parce qu'un faux pas de sa part et qu'il va en prison...

donc, vous n'investissez que quelques dollars, mais le voleur investit et risque beaucoup.

mais le voleur de données n'a pas de tels risques. juste le contraire - ff vous faites un mauvais mouvement (par exemple, si vous introduire un BUG en raison de barrières techniques), vous perdrez vos utilisateurs. Si le robot de raclage ne fonctionne pas pour la première fois, rien ne se passe - le mineur de données va juste essayer une autre approche et/ou va déboguer le script.

dans ce cas, vous devez investir beaucoup plus - et le racleur investir beaucoup moins.

il suffit de penser où vous voulez investir votre temps et de l'énergie...

Ps: l'anglais n'est pas ma langue maternelle - l'anglais cassé...

8
répondu jm666 2016-02-03 01:02:59

votre meilleure option est malheureusement assez manuelle: recherchez les modèles de trafic que vous croyez être révélateurs de racler et interdire leurs adresses IP.

puisque vous parlez d'un site public, alors rendre le moteur de recherche du site convivial permettra également le raclage du site. Si un moteur de recherche peut ramper et racler votre site puis un racleur malveillant peut ainsi. C'est une fine ligne de pied.

8
répondu STW 2016-02-18 12:07:46

bien sûr que c'est possible. Pour un succès à 100%, désactivez votre site.

en réalité, vous pouvez faire certains choses qui rendent le raclage un peu plus difficile. Google fait des vérifications de navigateur pour s'assurer que vous n'êtes pas un robot grattant les résultats de recherche (bien que cela, comme la plupart du reste, peut être mystifié).

vous pouvez faire des choses comme demander plusieurs secondes entre la première connexion à votre site, et les clics suivants. Je ne suis pas assurez-vous que le moment idéal serait ou exactement comment le faire, mais c'est une autre idée.

je suis sûr qu'il ya plusieurs autres personnes qui ont beaucoup plus d'expérience, mais j'espère que ces idées sont au moins quelque peu utile.

7
répondu Wayne Werner 2010-07-01 20:53:27

Il ya quelques choses que vous pouvez faire pour prévenir la capture d'écran. Certains ne sont pas très efficaces, tandis que d'autres (a CAPTCHA) le sont, mais entravent la convivialité. Vous devez garder à l'esprit aussi que cela peut entraver les gratteurs de site légitimes, tels que les index de moteur de recherche.

cependant, je suppose que si vous ne voulez pas qu'il soit effacé, cela signifie que vous ne voulez pas non plus que les moteurs de recherche l'indexent.

Voici quelques choses que vous pouvez essayer:

  • afficher le texte dans une image. C'est assez fiable, et c'est moins douloureux pour l'utilisateur qu'un CAPTCHA, mais cela signifie qu'ils ne seront pas capables de couper et coller et il ne sera pas escalader joliment OU être accessible.
  • utiliser un CAPTCHA et exiger qu'il soit rempli avant de retourner la page. C'est une méthode fiable, mais aussi la plus grande douleur à imposer à un utilisateur.
  • exiger de l'utilisateur de s'inscrire pour un compte avant de regarder les pages, et confirmer leur adresse e-mail. Ce sera assez efficace, mais pas totalement - un screen-scraper pourrait mettre en place un compte et pourrait habilement programmer leur script pour se connecter pour eux.
  • si la chaîne de caractères utilisateur-agent du client est vide, bloquez l'accès. Un script de grattage de site sera souvent paresseusement programmé et ne définira pas de chaîne de caractères utilisateur-agent, alors que tous les navigateurs web le feront.
  • vous pouvez configurer une liste noire de chaînes utilisateur-agent screen scraper connues à mesure que vous les Découvrez. Encore une fois, cela n'aidera que les codes paresseux; un programmeur qui sait ce qu'il fait peut définir une chaîne d'agent utilisateur pour usurper l'identité d'un navigateur web.
  • changez souvent le chemin de L'URL. Quand vous le changez, assurez-vous que l'ancien garde de travail, mais seulement aussi longtemps qu'un utilisateur est susceptible d'avoir leur navigateur ouvert. Il est donc difficile de prédire quel sera le nouveau chemin de L'URL. Cela rendra difficile pour les scripts de l'attraper si leur URL est codée en dur. Ce serait mieux de le faire avec une sorte de script.

si je devais le faire, j'utiliserais probablement une combinaison des trois derniers, parce qu'ils minimisent les inconvénients pour les utilisateurs légitimes. Cependant, vous devez accepter que vous ne serez pas en mesure de bloquer tout le monde de cette façon et une fois que quelqu'un découvre comment la contourner, ils seront en mesure de gratter pour toujours. Vous pourriez alors essayer de bloquer leurs adresses IP comme vous les Découvrez je suppose.

6
répondu thomasrutter 2010-07-02 00:56:07
  1. Non, il n'est pas possible de s'arrêter (en quelque sorte)
  2. embrasse-le. Pourquoi ne pas publier en tant que RDFa et devenir super moteur de recherche convivial et encourager la réutilisation des données? Les gens vous remercieront et vous accorderont du crédit là où il le faut (voir musicbrainz à titre d'exemple).

ce n'est pas la réponse que vous voulez probablement, mais pourquoi cacher ce que vous essayez de rendre public?

5
répondu nathan 2016-02-24 15:03:59

Première Méthode (Petits Sites Seulement )):

Servir des données cryptées / encodées.

Je Scape le web en utilisant python (urllib, requêtes, beautifulSoup etc...) et a trouvé de nombreux sites Web qui servent des données cryptées / encodées qui ne sont pas déchiffrables dans un langage de programmation simplement parce que la méthode de cryptage n'existe pas.

j'ai réalisé ceci dans un site web PHP en cryptant et en minimisant la sortie (AVERTISSEMENT: Ce n'est pas une bonne idée pour les grands sites) la réponse a toujours été le contenu brouillé.

exemple de minimisation de la sortie en PHP ( comment minifier la sortie HTML de la page php? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

Méthode 2:

Si vous ne pouvez pas les arrêter de les Baiser Sur servir des données fausses / inutiles comme une réponse.

Troisième Méthode:

bloquez les agents utilisateurs courants de raclage, vous le verrez dans les grands sites Web car il est impossible de les racler avec "python3.4" comme votre agent-utilisateur.

Méthode 4:

Assurez-vous que tous les en-têtes utilisateurs sont valides, je fournis parfois autant d'en-têtes que possible pour faire paraître mon scraper comme un utilisateur authentique, certains d'entre eux ne sont même pas vrais ou valides comme en-FU :).

Voici une liste de quelques-uns de les en-têtes que je fournis habituellement.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
4
répondu Community 2017-05-23 12:34:53

plutôt que d'inscrire les robots sur la liste noire, peut-être que vous devriez les inscrire sur la liste blanche. Si vous ne voulez pas tuer vos résultats de recherche pour les moteurs les plus populaires, vous pouvez blanchir leurs chaînes utilisateur-agent, qui sont généralement bien publicisés. Les bots moins éthiques ont tendance à forger des chaînes utilisateur-agent de navigateurs Web populaires. Les quelques moteurs de recherche les plus populaires devraient conduire plus de 95% de votre trafic.

identifier les bots eux-mêmes devrait être assez simple, en utilisant le techniques d'autres affiches ont été suggérées.

2
répondu Chris 2010-07-02 01:22:01

L'approche rapide à cet égard serait de mettre un piège/bot piège.

  1. faites une page qui, si elle est ouverte un certain nombre de fois ou même ouverte à tous, recueillera certaines informations comme L'IP et etc (Vous pouvez également considérer des irrégularités ou des modèles, mais cette page ne devrait pas avoir à être ouvert du tout).

  2. faire un lien vers cela dans votre page qui est cachée avec l'affichage CSS:none; ou a gauche: - 9999px; positon: absolute; essayez de le placer dans des endroits qui sont moins susceptibles d'être ignorés comme l'endroit où votre contenu tombe en dessous et pas votre pied de page car parfois les bots peuvent choisir d'oublier certaines parties d'une page.

  3. dans vos robots.le fichier txt a mis un tas de règles de Non-Autorisation aux pages que vous ne voulez pas de bots Amicaux (LOL, comme ils ont des visages heureux!) pour recueillir des informations et de définir cette page comme l'un d'eux.

  4. maintenant, si un bot amical passe par elle devrait ignorer cette page. Droit, mais qui n'est pas encore assez bon. Faites un couple plus de ces pages ou en quelque sorte re-route une page pour accepter des noms différents. et ensuite, placez plus de règles de non-droit à ces pages pièges dans vos robots.le fichier txt à côté des pages que vous voulez ignorer.

  5. Collecter l'adresse IP de ces robots ou toute personne qui entre dans ces pages, ne pas les interdire, mais de faire une fonction pour afficher texte nouille dans votre contenu comme des nombres aléatoires, des avis de droit d'auteur, des chaînes de texte spécifiques, Afficher des images effrayantes, essentiellement n'importe quoi pour entraver votre bon contenu. Vous pouvez également définir des liens qui pointent vers une page qui va prendre une éternité à charger ie. en php, vous pouvez utiliser la fonction sleep (). Cela combattra le crawler de retour si elle a une sorte de détection pour contourner les pages qui prennent beaucoup trop de temps à charger car certains bots bien écrits sont définis pour traiter x quantité de liens à la fois.

  6. si vous avez créé des chaînes de texte/phrases spécifiques pourquoi ne pas aller dans votre moteur de recherche préféré et les rechercher, il pourrait vous montrer où votre contenu se termine.

quoi qu'il en soit, si vous pensez tactiquement et de façon créative cela pourrait être un bon point de départ. La meilleure chose à faire serait d'apprendre comment fonctionne un bot.

je pense aussi à scambler des ID ou la façon dont les attributs sur l'élément de page sont affiché:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

qui change sa forme à chaque fois que certains bots peuvent être définis pour être à la recherche de modèles spécifiques dans vos pages ou des éléments ciblés.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"
2
répondu Steve Chan 2014-07-25 15:22:04

vous ne pouvez pas arrêter le raclage normal de l'écran. Pour le meilleur et pour le pire, c'est la nature du web.

Vous peut faire en sorte que personne ne puisse accéder à certaines choses (y compris des fichiers de musique), à moins qu'ils êtes connecté en tant qu'utilisateur enregistré. Il n'est pas trop difficile à faire dans Apache . Je suppose que ce ne serait pas trop difficile à faire dans IIS aussi.

1
répondu Dinah 2010-07-02 00:43:09

une façon serait de servir le contenu comme attributs XML, chaînes encodées URL, texte préformaté avec JSON encodé HTML, ou URIs de données, puis le transformer en HTML sur le client. Voici quelques sites qui font cela:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
    
  • Chrome Web Store : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
    
  • Bing Actualités : les données de l'URL

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
    
  • Protopage : l'URL des Chaînes Codées

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
    
  • TiddlyWiki : entités HTML + préformatted JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
    
  • Amazon : Chargement Paresseux

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
    
  • XMLCalabash : espace de noms XML + type MIME Personnalisé + une extension de Fichier

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>
    

si vous visualisez la source sur l'un des éléments ci-dessus, vous voyez que gratter ne fera que retourner les métadonnées et la navigation.

1
répondu Paul Sweatte 2015-12-15 19:55:45

la plupart ont déjà été dit, mais avez-vous considéré la protection CloudFlare? Je veux dire ceci:

image description

D'autres compagnies le font probablement aussi, CloudFlare est la seule que je connaisse.

je suis sûr que ça compliquerait leur travail. J'ai aussi une fois obtenu IP banni automatiquement pendant 4 mois quand j'ai essayé de supprimer les données d'un site protégé par CloudFlare en raison de la limite de taux (j'ai utilisé simple demande AJAX boucle.)

1
répondu Tomáš Zato 2016-02-03 10:09:44

je suis d'accord avec la plupart des messages ci-dessus, et je voudrais ajouter que plus votre site est convivial moteur de recherche, plus il serait rackettable. Vous pouvez essayer de faire une ou deux choses qui sont là, ce qui rend difficile pour les grattoirs, mais il peut aussi affecter votre recherche... Cela dépend de la façon dont vous voulez que votre site se classer sur les moteurs de recherche bien sûr.

1
répondu sjobe 2016-02-18 12:28:14

mettre votre contenu derrière un captcha signifierait que les robots trouveraient difficile d'accéder à votre contenu. Cependant, les humains seraient incommodés de sorte que cela peut être indésirable.

0
répondu SorcyCat 2010-07-01 20:53:30

si vous voulez voir un bon exemple, consultez http://www.bkstr.com / . Ils utilisent un algorithme j/s pour définir un cookie, puis télécharge la page afin qu'elle puisse utiliser le cookie pour valider que la requête est exécutée dans un navigateur. Une application de bureau construite pour racler pourrait certainement obtenir par cela, mais il arrêterait la plupart raclage de type cURL.

0
répondu blacktie24 2011-03-07 18:25:29
"151900920 Écran" grattoirs de travail par le traitement de HTML. Et s'ils sont déterminés à obtenir vos données, il n'y a pas grand-chose que vous puissiez faire techniquement parce que le globe oculaire humain traite n'importe quoi. Légalement, il a déjà été souligné que vous pouvez avoir un certain recours et ce serait ma recommandation.

cependant, vous pouvez masquer la partie critique de vos données en utilisant la logique de présentation non-HTML

  • générer un Flash fichier pour chaque artiste, album, etc.
  • générez une image pour chaque contenu d'artiste. Peut-être juste une image pour le nom de l'artiste, etc. serait suffisant. Faites ceci en rendant le texte sur un fichier JPEG / PNG sur le serveur et en le reliant à cette image.

gardez à l'esprit que cela affecterait probablement votre classement de recherche.

0
répondu James Westgate 2016-02-19 11:04:20

génère le HTML, CSS et JavaScript. Il est plus facile d'écrire des générateurs que des parsers, de sorte que vous pourriez générer chaque page servie différemment. Vous ne pouvez plus utiliser de cache ou de contenu statique.

0
répondu Stephan Eggermont 2016-02-24 15:05:24