11
votes

Regex qui correspond aux utilisateurs des navigateurs d'utilisateurs finaux mais pas de crawlers avec une précision de 90%

J'essaie de construire une regexp qui évaluera TRUE pour utilisateur utilisateur code>: S de "navigateurs navigancés par des humains", mais faux pour les robots. Inutile de dire que la correspondance ne sera pas exacte, mais si elle obtient les choses dites 90% des cas qui sont plus que suffisamment bons.

Mon approche jusqu'à présent est de cibler le utilisateur-utilisateur code> String des cinq grands navigateurs de bureau (MSIE, Firefox, Chrome, Safari, Opera). Spécifiquement, je souhaite que le REGEXP pas b> Pour correspondre si l'agent utilisateur est un bot (Googlebot, msnbot, etc.). P>

Actuellement, j'utilise le REGEXP suivant qui semble Atteindre la précision souhaitée: P>

(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)


4 commentaires

Qu'en est-il des bots qui identifient comme des navigateurs?


Macha: De toute évidence, ils seront classés comme navigateurs. Mais tant que celles-ci sont rares, elles ne seront pas un problème compte tenu de l'objectif de précision énoncé.


Oui, Errybody Courant un bot via votre site Web est honnête. La meilleure solution consiste à repenser ce que vous faites ici et comment vous allez à ce sujet. La plupart des gens préfèrent repérer des bots par comportement (beaucoup de pages différentes dans une période très courte) plutôt que par l'agent utilisateur.


: Voir le dernier paragraphe de la question. Il est très clair sur la portée de la question.


3 Réponses :


23
votes

Vous pouvez construire une liste noire en vérifiant quels agents utilisateur accédent à robots.txt.


2 commentaires

Concept intéressant! Façon de penser en dehors de la boîte.


Idée géniale! Je voulais vous donner des accessoires et un vote pour cela aussi :).



7
votes

De nombreux crawlers n'envoient pas d'en-tête de langue acceptante, tandis que Afaik tous les navigateurs font. Vous pouvez combiner ces informations avec votre regex pour obtenir des résultats plus précis.


3 commentaires

Le seul que j'ai vu ce désobéys c'est Slurp: [Mozilla / 5.0 (compatible; Yahoo! Slurp; help.yahoo.com/help/us/yssearch/slurp)] [en-nous, en; q = 0.5] Et aussi si vous servez un support, je pense que parfois les plugins de navigateur font une demande sans acceptation de langue si dans IE (c'est donc un non-bot, mais n'envoie pas de langue acceptée). Aussi Google Translate n'envoie pas une langue d'acceptation, mais en général, cette méthode semble bien fonctionner.


Donc, aussi loin que la logique: pensez-vous si (regex_matches || has_header) {is_human} si (regex_matches && has_header) {is_human} sera meilleur


@ Nathanj.brauer et , pas ou . Toujours pas absolument fiable, mais ce n'est pas possible de toute façon.



4
votes

Je préférerais utiliser le contraire, avoir un motif de bots est beaucoup plus simple

personnellement, j'utilise la regex suivante xxx


3 commentaires

C'est dangereux. J'ai ce filtré Mozilla / 5.0 (Linux; U; Android 3.0.1; en-US; Bouteille de fumée Build / hri66) Applewebkit / 534.13 (KHTML, comme Gecko) Version / 4.0 Safari / 534.13 < / Code>, et je n'avais que cela sur un sous-ensemble d'agents utilisateur que nous voyons jamais.


/ bot \ b | ... :-) Pas sûr de "Index", car certains plugins font des choses étranges aux chaînes d'agent utilisateur (en particulier dans IE, poussant la longueur)


Vous devriez ajouter "CURL" à votre regex