miércoles, 4 de julio de 2007

Buscando los enlaces de una web

Pongo otro ejemplo de lo bueno que es perl tratando textos, es un script simple que extrae los enlaces de una web, hay algunos tipos de enlaces que no filtra del todo bien, pero como era solo un experimento...tampoco me he preocupado.


#!/usr/bin/perl
use IO::Socket;

#analyzer, extrae los enlaces de una pagina web determinada

unless (@ARGV > 1) { die "Uso: $0 host documento" }
$host = shift(@ARGV);
foreach $document ( @ARGV ) {
$remote = IO::Socket::INET->new(Proto => "tcp", PeerAddr => $host, PeerPort => "http(80)");

unless ($remote) { die "No se puede conectar a $host" }

$remote->autoflush(1);
print $remote "GET $document HTTP/1.0\n\n";

push(@respuesta, <$remote>);
while (<$remote>) {push(@respuesta,<$remote>);}
$texto = join(" ",@respuesta);


#Extrae los enlaces
while ($texto=~/(href=)([^>]+)>/g){
$dir=$2;

#Elimina las comillas y limpia algunas direcciones
if($dir=~/\"([\s\S]+)\"[\s\S]*/){
$dir_limpia=$1;

#Elimina los enlaces que no empiecen por http o https
if($dir_limpia=~/^http/ or $dir_limpia=~/^https/){
print "$dir_limpia\n";
}
}
}

close $remote;
}



No tiene mucha utilidad por si solo, pero puede integrarse en programas más grandes, un ejemplo de funcionamiento, si ejecutamos: ./analyzer.pl google.es "/search?hl=es&q=javiyu&btnG=Buscar+con+Google&meta="

Obtendremos como salida los enlaces de la búsqueda en google.

...
http://javiyu.blogspot.com/
http://216.239.59.104/search?q=cache:Ai8OiBXDTQEJ:javiyu.blogspot.com/+javiyu&hl=es&ct=clnk&cd=4&ie=UTF-8
http://javiyu.blogspot.com/search/label/redes
...

0 comentarios: