La respuesta la tenemos en los logs de nuestro servidor web Apache o Nginx. Siempre y cuando nuestro formato de logs contenga información sobre el User-Agent que visita nuestra web.
Por ejemplo para Apache servirían los siguientes formatos:
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{User-agent}i" agent
En el caso de Nginx:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Si cumplimos este requisito de formato podremos ver cuántos hits hemos recibido de distintos crawlers web con un sencillo script. Creamos un fichero llamado listabots con una lista de los crawlers que queremos comprobar.
YandexBot Googlebot Googlebot-Image Twitterbot bingbot
El script bot_counter.sh sería el siguiente:
#!/bin/bash lista_agentes="$1" while read line;do contador_visitas=$(grep -w ${line} /var/log/apache2/ssl_access.log | wc -l) echo "Bot ${line} ha realizado ${contador_visitas} requests" done < $lista_agentes
Lanzamos el script con la lista como primer argumento obteniendo el siguiente resultado:
[root@jota apache]# ./bot_counter.sh listabots Bot YandexBot ha realizado 3 requests Bot Googlebot ha realizado 179 requests Bot Googlebot-Image ha realizado 10 requests Bot Twitterbot ha realizado 29 requests Bot bingbot ha realizado 207 requests
Siempre podremos definir más crawlers en nuestra lista. Una buena fuente es el repositorio crawler-user-agents donde se van recopilando los User-Agents utilizados por distintos crawlers web.
Aunque este método puede resultarnos útil, existen programas especializados en parsear logs para obtener esta información de una forma más automatizada y precisa como puede ser logwatch. Para instalarlo en las principales distros:
# Debian y derivadas apt-get install logwatch # RHEL y derivadas yum install logwatch
Una vez instalado podemos lanzar un informe detallado del servicio http (Apache) parseando los logs de ayer:
logwatch --detail high --service http --range yesterday
En una de las secciones finales de dicho informe encontraremos la información que buscamos:
A total of 7 ROBOTS were logged Mozilla/5.0 (compatible; MJ12bot/v1.4.7; http://mj12bot.com/) 1 Time(s) Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) 2 Time(s) Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com) 20 Time(s) Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) 3 Time(s) CSS Certificate Spider (http://www.css-security.com/certificatespider/) 1 Time(s) Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) 5 Time(s) Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 24 Time(s)
De todos estos bots habrá algunos legítimos y otros que no. Los primeros suelen hacer caso a nuestro fichero robots.txt donde indicamos qué queremos indexar y qué no. El segundo tipo de crawler que actúa por libre sin hacer caso a nuestras normas puede ser bloqueado, aunque eso es harina de otro artículo 😉