Mechanize es el módulo más completo de Perl para interactuar vía http con websites, este módulo tiene múltiples funciones, desde enviar formularios vía get y post, a la posibilidad de establecer parámetros de búsqueda dentro del cuerpo html de la web solicitada y de este modo obtener información como cabeceras, links, imágenes, formularios, etc ..., el problema es que mechanize no viene instalado en Perl por defecto, por lo tanto hay que hacerlo a través de CPAN ...
cpan> install WWW::Mechanize
La instalación puede tardar unos cinco minutos, pero merece la pena, ya que como podrás ver en los siguientes ejemplos se le puede sacar mucho partido, también puedes investigar un poco más sobre este módulo en el siguiente link ...
http://search.cpan.org/~ether/WWW-Mechanize-1.73/lib/WWW/Mechanize.pm
En el primer ejemplo se muestra como enviar un formulario con sus respectivos campos y valores y mostrar por la consola la respuesta del servidor ...
mechanize-form.pl
#mechanize-form.pl #Enviar formulario con Mechanize use WWW::Mechanize; use strict; my $url = "http://www.web.com/index.php"; #Crear un nuevo objeto mechanize my $mechanize = WWW::Mechanize->new(); #Url de destino $mechanize -> get($url); #Se preparan los datos a enviar en el formulario $mechanize -> submit_form( #Además de form_id, puedes utilizar form_number y form_name form_id => "form_sesion", #Rellena cada uno de los campos del formulario con su respectivo valor ... fields => {admin => "admin", password => "password"} ); #Almacenamos en esta variable el contenido devuelto por la petición my $contenido = $mechanize -> content(); #Se imprime el contenido print $contenido;
Este otro ejemplo extrae la url tanto de imágenes como de links, simplemente hay que indicar la url, la opción que se desea images o links y opcionalmente si se quiere guardar el resultado en un fichero.
mechanize-find.pl
#mechanize-find.pl #Buscar la url de imágenes y links con Mechanize #opción de guardar los resultado en un fichero use WWW::Mechanize; use strict; #parametros my $url = $ARGV[0]; my $tipo = $ARGV[1]; my $fichero = $ARGV[2]; if (!@ARGV || $tipo != "images" || $tipo != "links") { print "\n\n Introduce correctamente los datos ... mechanize-find.pl http://www.web.com/ images|links opcional[fichero txt] \n\n"; } else { #Crear un nuevo objeto mechanize my $mechanize = WWW::Mechanize->new(); #Url de destino $mechanize -> get($url); #Se busca el tipo que puede ser imágenes o links my @elementos = $mechanize -> $tipo; my $elemento; my $resultado; for $elemento (@elementos) { #Se recorre cada uno de los elementos y se almacenan en una variable $resultado .= $elemento->url . "\n"; } #Si se indica un fichero se crea el fichero y se guarda el resultado if ($fichero) { open(ARCHIVO, "+> $fichero"); print ARCHIVO $resultado; close(ARCHIVO); } #Se imprime el resultado en la consola print $resultado; }
No hay comentarios:
Publicar un comentario