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
