Regexp que corresponde aos agentes do usuário dos navegadores do usuário final, mas não rastreiam com> 90 % de precisão
-
22-09-2019 - |
Pergunta
Estou tentando construir um regexp que se avaliará como verdadeiro para User-Agent
: S de "Navegadores navegados por humanos", mas falsos para os bots. Escusado será dizer que a correspondência não será exata, mas se acertar as coisas, digamos 90 % dos casos que são mais do que bons o suficiente.
Minha abordagem até agora é atingir o User-Agent
A corda dos cinco principais navegadores de mesa (MSIE, Firefox, Chrome, Safari, Opera). Especificamente eu quero o regexp NÃO Para corresponder se o agente do usuário for um bot (GoogleBot, MSNBot, etc.).
Atualmente, estou usando o seguinte regexp que parece alcançar a precisão desejada:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Eu observei um pequeno número de falsos negativos que são principalmente navegadores móveis. As exceções todas correspondem:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Minha pergunta é: Dado o nível de precisão desejado, como você melhoraria o regexp? Você consegue pensar em quaisquer falsos positivos grandes ou falsos negativos para o regexp dado?
Observe que a pergunta é especificamente sobre baseada em regexp User-Agent
Coincidindo. Existem várias outras abordagens para resolver esse problema, mas elas estão fora do escopo dessa questão.
Solução
Muitos rastreadores não enviam um cabeçalho de linguagem aceita, enquanto a Afaik todos os navegadores fazem. Você pode combinar essas informações com o seu Regex para obter resultados mais precisos.
Outras dicas
Você pode construir uma lista negra verificando quais agentes de usuário acessarem robots.txt.
Prefiro usar o oposto, ter um padrão para bots é muito mais simples
Pessoalmente, eu uso o seguinte regex
/bot\b|index|spider|crawl|wget|slurp|Mediapartners-Google/i