post
y analizar los resultados.
Como ejemplo usaremos las páginas de búsqueda en el servidor de gestión integral de la Escuela Superior de Ingeniería Informática de la Universidad de La Laguna: http://w4.csi.ull.es/personal/cabecera.php3.
Lo primero es que nos pedirá autentificarnos. Observe bien el realm (Autentificacion).
Una vez atravesada la fase de autentificación, el formulario a rellenar es como sigue:
<form method="POST" action="busqueda.php3" target="pie" name="formu"> <table width=50% cellspacing="0" cellpadding="0" border=0 bgcolor="#DEDEDE"> <tr><td>Texto a buscar : <input type=text name=TEXTO size=10></td> <td><input type=submit value="Buscar"> </td></tr> </table> </form>
Y la salida tiene este aspecto:
<table cellspacing=3 cellpadding=3 width=90% align=center> <tr> <td bgcolor="#CBCCEB" width=60%><font size=+1><b>Nombre</b></font></td> <td bgcolor="#CBCCEB"><font size=+1><b>Username</b></font></td> <td bgcolor="#CBCCEB"><font size=+1><b>Departamento</b></font></td> </tr> <tr> <td><a href="info.php3?USER=fabiano" >RODRIGUEZ GIL, FABIANO</a></td> <td>fabiano</td><td>ESTADÍSTICA, I.O. y C.</td> </tr> </table> <table cellspacing=3 cellpadding=3 width=70% align=center> <tr bgcolor="#CBCCEB"> <td><font size=+1><b>Username</b></font></td> <td width=65%><font size=+1><b>Nombre</b></font></td></tr> <tr> <td><a href="mailto:fabiano@etsii.ull.es">fabiano</a></td> <td>Casiano Rodriguez Gil</td> </tr> <tr> <td><a href="mailto:call@etsii.ull.es">call</a></td> <td>Proyecto de German con Fabiano</td></tr> </table>Obsérvese que contiene dos tablas (no siempre).
Sigue una solución:
#! /usr/bin/perl -w use strict; use LWP::UserAgent; use HTML::TreeBuilder 3; die "Uso $0 \"nombre\"\n" unless @ARGV == 1; my $name = $ARGV[0]; my $browser = LWP::UserAgent->new; $browser->credentials( 'w4.etsii.ull.es:80', 'Autentificacion', 'alu999'=>'alu999password' ); my $response = $browser->post( 'http://w4.etsii.ull.es/personal/busqueda.php3', ['TEXTO'=>$name] ); die "Error: ", $response->status_line unless $response->is_success; my $root = HTML::TreeBuilder->new_from_content($response->content); my @rows = $root->find_by_tag_name('tr'); foreach my $n (@rows) { my @fields = $n->find_by_tag_name('td'); foreach my $f (@fields) { print $f->as_trimmed_text(),"\t"; } print "\n"; } $root->delete;
Casiano Rodríguez León