sábado, septiembre 26, 2009

Búsquedas por la web con PERL

El otro día quise ayudar a mi colega Castrol con un tema. Concretamente escribió un post sobre bibliotecas clásicas, y cómo el uso de Google parecía sustituirlo todo.

También contó alguna anécdota como un problema que tuvo al deletrear una palabra inglesa. No sabía si se escribía de una forma o de otra. Al final abrió Google y supuso que la versión con más respuestas era la correcta y la otra era la mala.

Como yo sabía que utiliza un portátil mac pensé en un pequeñito script Perl para facilitar este tipo de dudas. Mac OS X, como la mayoría de GNU/Linux, UNIX, etc. trae el interprete PERL incorporado.

La forma de ejecución es $buscar palabra1 palabra2 y el resultado:

palabra1: 1.200.000 resultados.
palabra2: 10.000 resultados.

El programa Perl es éste, pero lo más importante es que NO FUNCIONA.


Ahora bien, ¿POR QUÉ NO FUNCIONA?

Me he vuelto un poco loco hasta darme cuenta. No es que las sentencias estén mal ni nada de eso. Si en lugar de Google buscáramos en un documento de nuestro PC, en un blog, en un diario, etc. funcionaría sin problemas, pero no en GOOGLE, ni en YAHOO, y me imagino que tampoco funciona en otros muchos buscadores.

Hace años habría funcionado pero hoy en día ya no.

El problema es que estos buscadores están bloqueado la utilización de LWP.

Cuando accedemos al servidor de Google con nuestro programita PERL utilizando LWP, se le informa también de cual es la librería y versión con la que accedemos.

En mi instalación, el "UserAgent" se pasa por defecto con el valor "libwww-perl/5.805". A los buscadores no les gusta que accedamos (LWP) de esta forma y simplemente nos ignoran.

De esta forma podemos ver cómo accedemos:
use LWP::UserAgent;
my $ua=LWP::UserAgent->new;
print $ua->_agent;

¿UNA SOLUCIÓN RÁPIDA?

Bueno, podemos modificar el "default agent identifier" para que ponga que accedemos con Mozilla por ejemplo y asunto solucionado.

Para eso hay que utilizar el módulo LWP::UserAgent en lugar de LWP::Simple. En la imagen siguiente está el código fuente:



Ahora sí, si ejecutamos:

perl buscar.pl aciendo haciendo

Nos da la siguiente respuesta:

aciendo: 778.000 encontrados
haciendo: 51.000.000 encontrados

pd1: Utilizar este programa de esta forma incumple la condición 5.3 que Google establece para el acceso a su servicio (Condiciones de servicio de Google). Para evitar incumplir nada, en el próximo post explicaré la forma de acceso a través del interfaz (API) de Google.

pd2: No se si te será muy útil Castrol, pero espero que tengas suficiente curiosidad para probarlo e incluso que te conviertas en un PERL HACKER.

2 comentarios:

Javier Castro dijo...

Iriarte, estás hecho un auténtico MAQUINÓN!!!!! Muchas gracias por la info. Ya te contaré cuando lo pruebe, pero por si acaso... espera sentado! :-) En serio, me pondré a ello cuando pueda, pero en este momento no ha entrado en el top-ten en mi lista de prioridades :-) Ya sabes que estoy reñido con la informática.

Un abrazo sheriff!

Castrol

Aitor Iriarte dijo...

Sí capullín,
Ya he visto en tu blog que la informática está detrás del fútbol americano en tu lista de prioridades.

Nos vemos en Shangai. Gracias colega por hacer un hueco en el piso.

Espero no dar vergüenza ajena con mi pobre inglés del British School :D