Pasando lista a los crawlers que visitan nuestra web

By | October 29, 2017

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 😉