Expliquer les robots à l'écart des visiteurs humains pour les statistiques?

Je cherche à rouler mon propre script web stats simple.

Le seul obstacle majeur sur la route, autant que je peux le voir, dit aux visiteurs humains en dehors des bots. J'aimerais avoir une solution pour ce que je n'ai pas besoin de maintenir sur une base régulière (c.-à-d. Je ne veux pas mettre à jour les fichiers texte avec des agents utilisateur liés au robot).

Y a-t-il un service ouvert qui, comme Akismet le fait pour le spam? Ou existe-t-il un projet PHP dédié à la reconnaissance des araignées et des robots et fournit des mises à jour fréquentes?

Pour clarifier: je ne cherche pas à bloquer les robots. Je n'ai pas besoin de résultats étanches à 100% . Je veux juste exclure autant que possible de mes statistiques. En sachant que l'analyse de l'utilisateur-Agent est une option, mais maintenir les modèles à analyser est beaucoup de travail. Ma question est de savoir s'il existe un projet ou un service qui le fait déjà.

Bounty: Je pensais que je poserais ceci comme une question de référence sur le sujet. La contribution la meilleure / la plus originale / la plus techniquement viable recevra le montant de la prime.

Les humains et les robots feront des choses similaires, mais les robots feront des choses que les humains ne le font pas. Essayons d'identifier ces choses. Avant de regarder le comportement, acceptons le commentaire de RayQuang comme utile. Si un visiteur possède une chaîne utilisateur-agent d'un robot, c'est probablement un robot. Je ne peux pas imaginer quelqu'un qui tourne avec "Google Crawler" (ou quelque chose de similaire) comme UA, à moins qu'ils ne travaillent à briser quelque chose. Je sais que vous ne souhaitez pas mettre à jour manuellement une liste, mais l'extraction automatique de celle-ci devrait être bonne, et même si elle reste éteinte pour les 10 prochaines années, cela vous sera utile.

Certains ont déjà mentionné Javascript et le chargement de l'image, mais Google fera les deux. Nous devons supposer qu'il existe maintenant plusieurs bots qui feront les deux, donc ce ne sont plus des indicateurs humains. Ce que les robots vont toujours faire de manière unique, cependant, il faut suivre un lien "invisible". Lien vers une page d'une manière très sournoise que je ne peux pas voir en tant qu'utilisateur. Si cela se poursuit, nous avons un robot.

Les robots seront souvent, mais pas toujours, le respect de robots.txt. Les utilisateurs ne se soucient pas de robots.txt, et nous pouvons probablement supposer que quiconque récupère robots.txt est un robot. Nous pouvons aller un peu plus loin, et relier une page CSS fictive à nos pages exclues par robots.txt. Si notre CSS normal est chargé, mais notre CSS fictif n'est pas, c'est vraiment un robot. Vous devrez construire (probablement une mémoire en mémoire) des charges par IP et ne pas correspondre, mais cela devrait être vraiment vrai.

Donc, pour utiliser tout cela: maintenez une table de base de données de bots par adresse IP, éventuellement avec des limitations d'horodatage. Ajoutez tout ce qui suit votre lien invisible, ajoutez tout ce qui charge le CSS "réel", mais ignore le fichier robots.txt CSS. Peut-être ajouter tous les robots.txt télécharger aussi. Filtrer la chaîne user-agent comme dernière étape et envisager d'utiliser cette méthode pour effectuer une analyse rapide des statistiques et voir à quel point ces méthodes semblent fonctionner pour identifier les choses que nous connaissons sont des robots.

Le moyen le plus simple est de vérifier si leur useragent comprend 'bot' ou 'spider' in. La plupart font .

Pour commencer, si votre logiciel va fonctionner avec Javascript, la majorité des robots seront automatiquement supprimés car les robots, en général, n'ont pas de Javascript.

Néanmoins, la réponse directe à votre question est de suivre une liste de bot et d'ajouter leur agent utilisateur à la liste de filtrage.

Jetez un oeil à cette liste de bot.

Cette liste d'utilisateurs-agents est également très bonne. Il suffit de supprimer tous les B et vous êtes réglé.

EDIT: Le travail incroyable effectué par eSniff a la liste ci-dessus ici " dans une forme qui peut être interrogée et analysée plus facilement. Robotstxt.org/db/all.txt Chaque nouveau Bot est défini par un identifiant de robot: XXX. Vous devriez être en mesure Pour le télécharger une fois par semaine et analyser dans quelque chose que votre script peut utiliser "comme vous pouvez lire dans son commentaire.

J'espère que cela aide!

Considérons un script de statistiques PHP qui est camouflé sous la forme d'une image d'arrière-plan CSS (donnez les bons en-têtes de réponse, au moins le type de contenu et le contrôle du cache, mais écrivez une image vide).

Certains bots parses JS, mais certainement personne ne charge les images CSS. Un écueil – avec JS – est que vous excluerez les navigateurs basés sur le texte, mais c'est moins de 1% de la population mondiale. En outre, il existe certainement moins de clients handicapés CSS que les clients handicapés JS (mobiles!).

Pour rendre plus solide pour le cas (exceptionnel) que les robots plus avancés (Google, Yahoo, etc.) peuvent les ramper dans le futur, interdire le chemin d'accès à l'image CSS dans robots.txt (dont les meilleurs robots respecteront de toute façon) .

J'utilise actuellement AWstats et Webalizer pour surveiller mes fichiers journaux pour Apasce2 et, jusqu'à présent, ils ont fait un très bon travail. Si vous souhaitez que vous puissiez consulter leur code source car il s'agit d'un projet open source.

Vous pouvez obtenir la source à http://awstats.sourceforge.net ou bien regarder les FAQ http://awstats.sourceforge.net/docs/awstats_faq.html

L'espoir qui aide, RayQuang

J'utilise ce qui suit pour mon application de statistiques / compteur:

 <?php function is_bot($user_agent) { return preg_match('/(abot|dbot|ebot|hbot|kbot|lbot|mbot|nbot|obot|pbot|rbot|sbot|tbot|vbot|ybot|zbot|bot\.|bot\/|_bot|\.bot|\/bot|\-bot|\:bot|\(bot|crawl|slurp|spider|seek|accoona|acoon|adressendeutschland|ah\-ha\.com|ahoy|altavista|ananzi|anthill|appie|arachnophilia|arale|araneo|aranha|architext|aretha|arks|asterias|atlocal|atn|atomz|augurfind|backrub|bannana_bot|baypup|bdfetch|big brother|biglotron|bjaaland|blackwidow|blaiz|blog|blo\.|bloodhound|boitho|booch|bradley|butterfly|calif|cassandra|ccubee|cfetch|charlotte|churl|cienciaficcion|cmc|collective|comagent|combine|computingsite|csci|curl|cusco|daumoa|deepindex|delorie|depspid|deweb|die blinde kuh|digger|ditto|dmoz|docomo|download express|dtaagent|dwcp|ebiness|ebingbong|e\-collector|ejupiter|emacs\-w3 search engine|esther|evliya celebi|ezresult|falcon|felix ide|ferret|fetchrover|fido|findlinks|fireball|fish search|fouineur|funnelweb|gazz|gcreep|genieknows|getterroboplus|geturl|glx|goforit|golem|grabber|grapnel|gralon|griffon|gromit|grub|gulliver|hamahakki|harvest|havindex|helix|heritrix|hku www octopus|homerweb|htdig|html index|html_analyzer|htmlgobble|hubater|hyper\-decontextualizer|ia_archiver|ibm_planetwide|ichiro|iconsurf|iltrovatore|image\.kapsi\.net|imagelock|incywincy|indexer|infobee|informant|ingrid|inktomisearch\.com|inspector web|intelliagent|internet shinchakubin|ip3000|iron33|israeli\-search|ivia|jack|jakarta|javabee|jetbot|jumpstation|katipo|kdd\-explorer|kilroy|knowledge|kototoi|kretrieve|labelgrabber|lachesis|larbin|legs|libwww|linkalarm|link validator|linkscan|lockon|lwp|lycos|magpie|mantraagent|mapoftheinternet|marvin\/|mattie|mediafox|mediapartners|mercator|merzscope|microsoft url control|minirank|miva|mj12|mnogosearch|moget|monster|moose|motor|multitext|muncher|muscatferret|mwd\.search|myweb|najdi|nameprotect|nationaldirectory|nazilla|ncsa beta|nec\-meshexplorer|nederland\.zoek|netcarta webmap engine|netmechanic|netresearchserver|netscoop|newscan\-online|nhse|nokia6682\/|nomad|noyona|nutch|nzexplorer|objectssearch|occam|omni|open text|openfind|openintelligencedata|orb search|osis\-project|pack rat|pageboy|pagebull|page_verifier|panscient|parasite|partnersite|patric|pear\.|pegasus|peregrinator|pgp key agent|phantom|phpdig|picosearch|piltdownman|pimptrain|pinpoint|pioneer|piranha|plumtreewebaccessor|pogodak|poirot|pompos|poppelsdorf|poppi|popular iconoclast|psycheclone|publisher|python|rambler|raven search|roach|road runner|roadhouse|robbie|robofox|robozilla|rules|salty|sbider|scooter|scoutjet|scrubby|search\.|searchprocess|semanticdiscovery|senrigan|sg\-scout|shai\'hulud|shark|shopwiki|sidewinder|sift|silk|simmany|site searcher|site valet|sitetech\-rover|skymob\.com|sleek|smartwit|sna\-|snappy|snooper|sohu|speedfind|sphere|sphider|spinner|spyder|steeler\/|suke|suntek|supersnooper|surfnomore|sven|sygol|szukacz|tach black widow|tarantula|templeton|\/teoma|t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e|theophrastus|titan|titin|tkwww|toutatis|t\-rex|tutorgig|twiceler|twisted|ucsd|udmsearch|url check|updated|vagabondo|valkyrie|verticrawl|victoria|vision\-search|volcano|voyager\/|voyager\-hc|w3c_validator|w3m2|w3mir|walker|wallpaper|wanderer|wauuu|wavefire|web core|web hopper|web wombat|webbandit|webcatcher|webcopy|webfoot|weblayers|weblinker|weblog monitor|webmirror|webmonkey|webquest|webreaper|websitepulse|websnarf|webstolperer|webvac|webwalk|webwatch|webwombat|webzinger|wget|whizbang|whowhere|wild ferret|worldlight|wwwc|wwwster|xenu|xget|xift|xirq|yandex|yanga|yeti|yodao|zao\/|zippp|zyborg|\.\.\.\.)/i', $user_agent); } //example usage if (! is_bot($_SERVER["HTTP_USER_AGENT"])) echo "it's a human hit!"; ?> 

J'ai obtenu la liste de bot à partir d' ici , puis minimisé fondamentalement la fonction.

La vérification de l'agent utilisateur vous alertera sur les robots honnêtes, mais pas sur les spammeurs.

Pour savoir quelles demandes sont faites par des robots malhonnêtes, votre meilleur pari ( basé sur l'étude intéressante de ce gars ) est de prendre un événement de mise au point Javascript .

Si l'événement de mise au point se déclenche, la page a été presque certainement chargée par un être humain.

  • Edit: c'est vrai, les personnes avec Javascript désactivé ne seront pas apparues comme des humains, mais ce n'est pas un pourcentage important d'internautes .
  • Edit2: les robots actuels peuvent également exécuter Javascript, au moins Google peut .

Plutôt que d'essayer de maintenir une liste incroyablement longue d'agents d'araignée, nous recherchons des éléments qui suggèrent un comportement humain. Le principe est que nous divisons notre nombre de sessions en deux chiffres: le nombre de séances d'une seule page et le nombre de sessions multi-pages. Nous déposons un cookie de session et utilisons cela pour déterminer les sessions de plusieurs pages. Nous déposons également un cookie persistant de "Machine ID"; Un utilisateur qui retourne (cookie ID Machine trouvé) est traité comme une session multi-page, même s'ils ne voient qu'une seule page dans cette session. Vous pouvez avoir d'autres caractéristiques qui impliquent un visiteur "humain": le référent est Google, par exemple (même si je crois que le moteur de recherche MS se mascarne en tant qu'Agent de l'utilisateur standard renvoyé avec un mot-clé réaliste pour vérifier que le site ne montre pas de contenu différent [ À celui donné à leur Bot], et ce comportement ressemble beaucoup à un humain!)

Bien sûr, cela n'est pas infaillible, et en particulier si vous avez beaucoup de gens qui arrivent et "cliquez dessus", ce ne sera pas une bonne statistique pour vous, ni si vous avez la prédominance de personnes avec des cookies désactivés (dans notre cas, ils Ne pourra pas utiliser notre site [panier d'achat] sans cookies de session activés).

Prenant les données d'un de nos clients, nous constatons que le nombre de sessions individuelles quotidiennes est partout – un ordre de grandeur différent du jour au jour; Cependant, si nous soustrayons 1000 de la session multi-page par jour, nous avons un taux intrusément linéaire de 4 sessions multi-pages par ordre placé / deux sessions par panier. Je n'ai aucune idée réelle de ce que font les autres 1000 sessions multi-pages par jour!

Enregistrez le mouvement et le défilement de la souris en utilisant javascript. Vous pouvez le constater à partir des données enregistrées, même si c'est un humain ou un robot. À moins que le bot soit vraiment vraiment sophistiqué et imite les mouvements humains de la souris.

Prérequis – le référent est défini

Niveau apache:

 LogFormat "%U %{Referer}i %{%Y-%m-%d %H:%M:%S}t" human_log RewriteRule ^/human/(.*) /b.gif [L] SetEnv human_session 0 # using referrer SetEnvIf Referer "^http://yoursite.com/" human_log_session=1 SetEnvIf Request_URI "^/human/(.*).gif$" human_dolog=1 SetEnvIf human_log_session 0 !human_dolog CustomLog logs/human-access_log human_log env=human_dolog 

Dans la page Web, /human/$hashkey_of_current_url.gif un /human/$hashkey_of_current_url.gif .
Si c'est un robot, il est peu probable de définir un référent (c'est une zone grise).
Si vous appuyez directement sur la barre d'adresse du navigateur, il ne sera pas inclus.

À la fin de chaque journée, /human-access_log devrait contenir tout le référent qui est en réalité la page-vue humaine.

Pour jouer en toute sécurité, le hash du référent du journal apache devrait correspondre au nom de l'image

Avoir un gif 1×1 dans vos pages que vous faites un suivi. S'il est chargé, il est susceptible d'être un navigateur. Si ce n'est pas chargé, il est probable qu'il s'agisse d'un script.

=? Désolé, mal compris. Vous pouvez essayer une autre option que j'ai configurée sur mon site: créez une page Web non liée avec un nom difficile / étrange et enregistrez les visites à cette page. La plupart sinon tous les visiteurs de cette page seront des robots, de cette façon, vous pourrez créer votre liste de bot de manière dynamique.

La réponse d'origine suit (obtenant des notes négatives!)

La seule façon fiable de dire aux robots des êtres humains [CAPTCHAS] [1]. Vous pouvez utiliser [reCAPTCHA] [2] si cela vous convient.

[1]: http://en.wikipedia.org/wiki/Captcha
[2]: http://recaptcha.net/

Je suis surpris que personne n'ait recommandé la mise en œuvre d'un test de Turing . Il suffit d'avoir une boîte de discussion avec l'homme de l'autre côté.

Une solution programmée ne le fera pas: voir ce qui se passe lorsque PARRY rencontre le docteur

Ces deux «personnages» sont à la fois des bots "chatter" qui ont été écrits au cours de la recherche sur l'IA dans les années 70: pour voir combien de temps ils pourraient tromper une personne réelle en pensant qu'ils étaient aussi une personne. Le caractère PARRY a été modelé comme un schizophrène paranoïaque et THE DOCTOR comme psychothérapeute stéréotypé.

Voici un peu plus de fond

Vous pouvez exclure toutes les demandes provenant d'un agent utilisateur qui demande également robots.txt . Tous les robots bien comportés feront une telle demande, mais les mauvais robots échapperont à la détection.

Vous auriez également des problèmes avec des faux positifs – en tant qu'humain, ce n'est pas très souvent que j'ai lu un fichier robots.txt dans mon navigateur, mais je peux certainement. Pour éviter que ceux-ci ne s'affichent incorrectement en tant que bots, vous pouvez ajouter une liste blanche d'agents d'utilisation de navigateur communs et les considérer comme toujours humains. Mais cela se transforme simplement en la maintenance d'une liste d'agents utilisateurs pour les navigateurs au lieu d'un pour les robots.

Donc, cette approche-the-request-robots.txt ne donnera certainement pas des résultats étanches à 100%, mais elle peut fournir certaines heuristiques pour alimenter une solution complète.