php - crawler - ¿Cómo identificar el rastreador web?
crawler web (6)
El agente de usuario ( $_SERVER[''HTTP_USER_AGENT'']
) a menudo identifica si el agente de conexión es un navegador o un robot. Revise los registros / análisis para los agentes de usuario de los rastreadores que visitan su sitio. Filtrar en consecuencia.
Tenga en cuenta que el agente de usuario es un encabezado proporcionado por la aplicación cliente. Como tal, puede ser prácticamente cualquier cosa y no debe confiarse al 100%. Planifique en consecuencia.
¿Cómo puedo filtrar los hits de webcrawlers, etc. Hits que no son humanos ...
Uso maxmind.com para solicitar la ciudad desde la IP. No es del todo barato si tengo que pagar por TODOS los accesos, incluidos webcrawlers, robots, etc.
Encontré este paquete, está siendo desarrollado activamente y me está gustando bastante hasta ahora:
https://github.com/JayBizzle/Crawler-Detect
Es tan simple como esto:
use Jaybizzle/CrawlerDetect/CrawlerDetect;
$CrawlerDetect = new CrawlerDetect;
// Check the user agent of the current ''visitor''
if($CrawlerDetect->isCrawler()) {
// true if crawler user agent detected
}
// Pass a user agent as a string
if($CrawlerDetect->isCrawler(''Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)'')) {
// true if crawler user agent detected
}
// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();
Hay dos formas generales de detectar robots y los llamaría "cortés / pasivo" y "agresivo". Básicamente, tienes que darle a tu sitio web un trastorno psicológico.
Cortés
Estas son formas de decirle cortésmente a los rastreadores que no deberían rastrear su sitio y limitar la frecuencia con la que se rastrea. La cortesía se garantiza a través del archivo robots.txt en el que usted especifica qué robots, en su caso, deberían poder rastrear su sitio web y la frecuencia con la que se puede rastrear su sitio web. Esto supone que el robot con el que estás tratando es educado.
Agresivo
Otra forma de mantener a los bots fuera de tu sitio es volverse agresivo.
Agente de usuario
Algunos comportamientos agresivos incluyen (como se mencionó anteriormente por otros usuarios) el filtrado de cadenas de usuario-agente. Esta es probablemente la forma más simple, pero también la menos confiable de detectar si es un usuario o no. Muchos bots tienden a falsificar los agentes de usuario y algunos lo hacen por razones legítimas (es decir, solo quieren rastrear contenido móvil), mientras que otros simplemente no quieren ser identificados como bots. Peor aún, algunos robots falsifican agentes bot legítimos / educados, como los agentes de usuario de google, microsoft, lycos y otros rastreadores que generalmente se consideran amables. Confiar en el agente de usuario puede ser útil, pero no por sí solo.
Hay formas más agresivas de tratar con robots que falsifican a los agentes de usuario Y no cumplen con su archivo robots.txt:
Trampa de bot
Me gusta pensar en esto como una "Venus Fly Trap", y básicamente castiga a cualquier robot que quiera jugar trucos contigo.
Una trampa de bot es probablemente la forma más efectiva de encontrar bots que no se adhieran a su archivo robots.txt sin menoscabar la utilidad de su sitio web. Crear una trampa de bot asegura que solo se capturen bots y no usuarios reales. La forma básica de hacerlo es configurar un directorio que usted marca específicamente como fuera de límites en su archivo robots.txt, para que cualquier robot que sea cortés no caiga en la trampa. Lo segundo que debe hacer es colocar un enlace "oculto" de su sitio web al directorio de captura de bots (esto garantiza que los usuarios reales nunca vayan allí, ya que los usuarios reales nunca hacen clic en enlaces invisibles). Finalmente, prohibes cualquier dirección IP que vaya al directorio de captura de bots.
Aquí hay algunas instrucciones sobre cómo lograr esto: Cree una trampa de bot (o en su caso: una trampa de bot de PHP ).
Nota: por supuesto, algunos bots son lo suficientemente inteligentes como para leer su archivo robots.txt, ver todos los directorios que ha marcado como "fuera de límites" y TODAVÍA ignorar su configuración de cortesía (como la tasa de rastreo y los bots permitidos). Esos bots probablemente no caerán en tu trampa de bot a pesar de que no son educados.
Violento
Creo que esto es en realidad demasiado agresivo para la audiencia general (y para uso general), por lo que si hay niños menores de 18 años, ¡por favor, llévelos a otra habitación!
Puede hacer que la captura del bot sea " violenta " simplemente no especificando un archivo robots.txt. En esta situación, CUALQUIER BOTO que rastree los enlaces ocultos probablemente terminará en la trampa del bot y puede prohibir todos los bots, ¡punto!
La razón por la que no se recomienda esto es que es posible que desee que algunos bots rastreen su sitio web (como Google, Microsoft u otros bots para la indexación de sitios). Permitiendo que su sitio web sea rastreado cortésmente por los robots de Google, Microsoft, Lycos, etc. se asegurará de que su sitio se indexe y se muestre cuando la gente lo busque en su motor de búsqueda favorito.
Autodestructivo
Otra forma de limitar lo que los bots pueden rastrear en su sitio web, es servir los CAPTCHA u otros desafíos que un bot no puede resolver. Esto tiene un costo para los usuarios y creo que cualquier cosa que haga que su sitio web sea menos utilizable (como un CAPTCHA) es "autodestructiva". Esto, por supuesto, no impedirá que el bot intente rastrear su sitio web en repetidas ocasiones, simplemente hará que su sitio web no sea muy interesante para ellos. Hay formas de "sortear" los CAPTCHA, pero son difíciles de implementar, así que no voy a profundizar en esto demasiado.
Conclusión
Para sus propósitos, probablemente la mejor manera de lidiar con los robots es emplear una combinación de las estrategias mencionadas anteriormente:
- Filtrar los agentes de usuario.
- Configurar una trampa de bot (la violenta).
Atrapa a todos los bots que entran en la trampa violenta del bot y simplemente coloca en una lista negra sus IPs (pero no los bloquea). De esta manera, seguirá obteniendo los "beneficios" de ser rastreado por bots, pero no tendrá que pagar para verificar las direcciones IP que están en la lista negra debido a que va a la trampa de su bot.
La verificación del User-Agent lo protegerá de bots legítimos como Google y Yahoo.
Sin embargo, si también te están atacando los robots de spam, es probable que la comparación Usuario-Agente no te proteja, ya que esos robots generalmente forjan una cadena común de Usuario-Agente de todos modos. En ese caso, necesitarías implementar medidas más sofisticadas. Si se requiere la entrada del usuario, funcionará un esquema de verificación de imagen simple como ReCaptcha o phpMeow.
Si está buscando filtrar todos los resultados de páginas de un bot, desafortunadamente, no hay una forma 100% confiable de hacerlo si el robot está falsificando sus credenciales. Esto es solo un hecho molesto de la vida en Internet que los administradores de web tienen que soportar.
Puedes consultar USER_AGENT, algo como:
function crawlerDetect($USER_AGENT)
{
$crawlers = array(
array(''Google'', ''Google''),
array(''msnbot'', ''MSN''),
array(''Rambler'', ''Rambler''),
array(''Yahoo'', ''Yahoo''),
array(''AbachoBOT'', ''AbachoBOT''),
array(''accoona'', ''Accoona''),
array(''AcoiRobot'', ''AcoiRobot''),
array(''ASPSeek'', ''ASPSeek''),
array(''CrocCrawler'', ''CrocCrawler''),
array(''Dumbot'', ''Dumbot''),
array(''FAST-WebCrawler'', ''FAST-WebCrawler''),
array(''GeonaBot'', ''GeonaBot''),
array(''Gigabot'', ''Gigabot''),
array(''Lycos'', ''Lycos spider''),
array(''MSRBOT'', ''MSRBOT''),
array(''Scooter'', ''Altavista robot''),
array(''AltaVista'', ''Altavista robot''),
array(''IDBot'', ''ID-Search Bot''),
array(''eStyle'', ''eStyle Bot''),
array(''Scrubby'', ''Scrubby robot'')
);
foreach ($crawlers as $c)
{
if (stristr($USER_AGENT, $c[0]))
{
return($c[1]);
}
}
return false;
}
// example
$crawler = crawlerDetect($_SERVER[''HTTP_USER_AGENT'']);
useragentstring.com está sirviendo un tiempo que puede utilizar para analizar la cadena de usuarios:
$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER[''HTTP_USER_AGENT''])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler") die();