57 votes

Distinguer les bots des visiteurs humains pour les statistiques ?

Je cherche à mettre en place mon propre script simple de statistiques web.

Le seul obstacle majeur sur la route, pour autant que je sache, est de distinguer les visiteurs humains des robots. J'aimerais avoir une solution pour cela que je n'ai pas besoin de maintenir régulièrement (c'est-à-dire que je ne veux pas mettre à jour des fichiers texte avec des User-agents liés à des robots).

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

Pour clarifier : Je ne cherche pas à bloquer les bots. Je n'ai pas besoin de résultats 100% étanches . Je veux juste Je veux juste en exclure le plus possible de mes statistiques. Sur savons que l'analyse de l'agent utilisateur est une option mais maintenir les modèles à pour l'analyse syntaxique représente beaucoup de travail. Ma question question est de savoir s'il existe un projet ou service qui le fait déjà.

Une prime : J'ai pensé que je pourrais pousser ceci comme une question de référence sur le sujet. La meilleure contribution / la plus originale / la plus techniquement viable recevra le montant de la prime.

0 votes

Je peux vous demander pourquoi vous voulez faire le vôtre ? Cela peut ajouter une grande quantité de stress supplémentaire à vos serveurs (write ops). Qu'est-ce que GA ne peut pas suivre pour vous ?

0 votes

@galambalazs Je ne veux pas utiliser GA dans ce scénario. L'objectif est d'avoir une solution complètement autonome.

0 votes

Je comprends ce que votre objectif est. Je suis juste curieux de savoir pourquoi ? :)

72voto

Jeff Ferland Points 9485

Les humains et les bots feront des choses similaires, mais les bots feront des choses que les humains ne font pas. Essayons d'identifier ces choses. Avant de regarder le comportement, acceptons RayQuang's commentaire comme étant utile. Si un visiteur a la chaîne user-agent d'un bot, c'est probablement un bot. Je n'imagine pas quelqu'un se promener avec "Google Crawler" (ou quelque chose de similaire) comme UA, à moins qu'il ne cherche à casser quelque chose. Je sais que vous ne voulez pas mettre à jour une liste manuellement, mais l'extraction automatique de cette liste devrait être utile, et même si elle reste périmée pendant les 10 prochaines années, elle sera utile.

Certains ont déjà mentionné le Javascript et le chargement d'images, mais Google s'occupe des deux. Nous devons supposer qu'il y a maintenant plusieurs bots qui font les deux, donc ce ne sont plus des indicateurs humains. Ce que les robots feront toujours de manière unique, cependant, c'est suivre un lien "invisible". Un lien vers une page d'une manière très sournoise que je ne peux pas voir en tant qu'utilisateur. Si ce lien est suivi, nous avons un robot.

Les robots respectent souvent, mais pas toujours, le fichier robots.txt. Les utilisateurs ne se soucient pas de robots.txt, et nous pouvons probablement supposer que toute personne qui récupère robots.txt est un robot. Nous pouvons cependant aller un peu plus loin et lier à nos pages une page CSS factice exclue par robots.txt. Si notre CSS normal est chargé mais que notre CSS factice ne l'est pas, il s'agit bien d'un robot. Vous devrez construire un tableau (probablement en mémoire) des chargements par IP et faire une correspondance not contained in, mais cela devrait être un indice très solide.

Donc, pour utiliser tout cela : maintenez une table de base de données des bots par adresse IP, éventuellement avec des limitations d'horodatage. Ajoutez tout ce qui suit votre lien invisible, ajoutez tout ce qui charge le "vrai" CSS mais ignore le CSS de robots.txt. Ajoutez peut-être aussi tous les téléchargeurs de robots.txt. Filtrez la chaîne user-agent à la dernière étape, et envisagez de l'utiliser pour faire une analyse rapide des statistiques et voir dans quelle mesure ces méthodes semblent fonctionner pour identifier les éléments que nous savons être des robots.

1 votes

Je n'aime pas le save IP address partie

4 votes

JeffFerland à l'heure de l'espionnage massif de la NSA, nous avons besoin de sites de confiance qui n'enregistrent pas du tout l'adresse IP.

0 votes

Environ 2 % de la population est aveugle. Chez les personnes âgées, ce pourcentage s'élève à environ 6 %. Les aveugles surfent souvent sur le web en utilisant des navigateurs qui ne chargent pas les images, les feuilles de style ou le JavaScript. Si votre site présente un intérêt quelconque pour les personnes aveugles, ne les oubliez pas lorsque vous analysez vos fichiers journaux. Merci.

21voto

Yacoby Points 29771

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

0 votes

Hmm. Est-ce que ça pourrait être aussi facile ? Mais il y a aussi des agents utilisateurs comme wget ou getleft qu'il serait bon de reconnaître également. Quand même - +1

4 votes

Ceux qui sont légitimes le sont. Les mauvais (par exemple, les moissonneurs d'e-mails) se contentent de détourner une chaîne d'agent utilisateur d'un navigateur web.

1 votes

Et ceux qui ne le font pas ne veulent probablement pas que vous sachiez qu'ils sont des robots de toute façon.

13voto

Frankie Points 12557

EDIT (10 ans plus tard) : Comme Lukas l'a dit dans la boîte de commentaires, presque tous les robots d'exploration supportent aujourd'hui le javascript. J'ai donc supprimé le paragraphe qui indiquait que si le site était basé sur JS, la plupart des robots seraient automatiquement éliminés.

Vous pouvez suivre une liste de robots et ajouter leur agent utilisateur à la liste de filtrage.

Jetez un coup d'œil à cette liste de robots.

Este liste des agents utilisateurs est également très bon. Juste enlevez tous les B et vous êtes prêt.

EDITAR: Un travail étonnant réalisé par eSniff a la liste ci-dessus ici " sous une forme qui peut être interrogée et analysée plus facilement. robotstxt.org/db/all.txt Chaque nouveau robot est défini par un robot-id:XXX. Vous devriez être capable de le télécharger une fois par semaine et de l'analyser en quelque chose que votre script peut utiliser. "comme vous pouvez le lire dans son commentaire.

J'espère que cela vous aidera !

0 votes

Selon le marché que vous visez, beaucoup d'utilisateurs non plus. De nombreux utilisateurs de Firefox ont tendance à utiliser NoScript.

0 votes

Les listes de robots ont l'air bien. Peut-être qu'une solution combinée JS / botlist, avec une mise à jour fréquente de la liste, est la meilleure solution. À la vôtre !

15 votes

NoScript signifie aussi, pas de StackOverflow, pas de Gmail, Reader, Maps, Facebook, YouTube et ainsi de suite... J'utilise NoScript tout le temps pour vérifier mes propres sites pour les araignées et les bots, mais aujourd'hui n'a pas beaucoup de sens d'utiliser NoScript. C'est juste mon opinion.

11voto

BalusC Points 498232

Prenons l'exemple d'une statistique PHP script qui est camouflée en image de fond 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 robots analysent les JS, mais certainement pas les images CSS. Comme pour JS, vous risquez d'exclure les navigateurs en mode texte, mais cela représente moins de 1 % de la population mondiale du Web. De plus, il y a certainement moins de clients handicapés par les CSS que par les JS (mobiles !).

Pour le rendre plus solide dans le cas (non exceptionnel) où les robots les plus avancés (Google, Yahoo, etc.) pourraient les explorer à l'avenir, interdisez le chemin vers l'image CSS dans le fichier robots.txt (que les meilleurs bots respecteront de toute façon).

1 votes

L'image d'arrière-plan CSS pourrait-elle être mise en cache lors des visites suivantes et ne pas être redemandée ?

0 votes

@Kristen : pas si vous ajoutez des en-têtes no-cache.

0 votes

Si vous stockez les statistiques dans une base de données, cela nécessite-t-il deux connexions distinctes ?

4voto

J'utilise actuellement AWstats et Webalizer pour surveiller mes fichiers journaux pour Apasce2 et jusqu'à présent, ils ont fait un assez bon travail. Si vous le souhaitez, vous pouvez jeter un coup d'œil à leur code source car il s'agit d'un projet open source.

Vous pouvez obtenir la source à l'adresse suivante http://awstats.sourceforge.net ou bien consultez la FAQ http://awstats.sourceforge.net/docs/awstats_faq.html

J'espère que cela vous aidera, RayQuang

1 votes

Le fichier de 1670 lignes qu'utilise awstats pour rechercher les bots à partir de la chaîne de l'agent de l'utilisateur est le suivant awstats.cvs.sourceforge.net/viewvc/awstats/awstats/wwwroot/ Effrayant

0 votes

Je suis d'accord avec toi Ray, AWstats me convient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X