Regexp que corresponde aos agentes do usuário dos navegadores do usuário final, mas não rastreiam com> 90 % de precisão

StackOverflow https://stackoverflow.com/questions/2508214

  •  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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top