Cita:
Iniciado por monoswim Sería algo así...(Lo escribo de memoria, puede tener errores)
Código:
#abrimos el documento
open(FILE,"<pag.html");
while (my $line = <FILE>){ #ANALIZAMOS CADA LINEA DEL SCRIPT
my (@links) = $line =~ /href\=\"(.*?)\"/; #CARGAMOS EN @LINKS el contenido de los href
print join("<br>", @links); #imprimimos los links que se cargaron separados de un br
}
close (FILE);
Lo escribí mientras te respondía, no lo probé...Hacelo vos...jeje
Saludos
Uhm, aunque te puede funcionar, en muchos casos no vas a tener los resultados deseados, por ejemplo te vas a meter en serios problemas si el documento tiene URLs relativos.
En el siguiente código pones el URL del cual quieres leer las ligas y te las imprime, todas las ligas relativas las convierte a absolutas:
Código:
#!/usr/bin/perl
use warnings;
use strict;
use HTML::LinkExtor;
use URI::URL;
use LWP::UserAgent;
use HTTP::Request;
my @href = ();
#URL DEL CUAL QUEREMOS LAS LIGAS
my $URL = "http://www.yahoo.com/";
#CONSEGUIMOS LAS LIGAS
my @links = leer_ligas($URL);
#AHORA LAS IMPRIMIMOS
print "$_\n" foreach @links;
#FUNCIÓN CON TODA LA MAGIA
sub leer_ligas{
my $url = shift;
my $ua = LWP::UserAgent->new;
sub callback {
my($tag, %attr) = @_;
return if $tag ne 'a';
push(@href, values %attr);
}
# Make the parser. Unfortunately, we don't know the base yet
# (it might be diffent from $url)
my $p = HTML::LinkExtor->new(\&callback);
# Request document and parse it as it arrives
my $res = $ua->request(HTTP::Request->new(GET => $url),
sub {$p->parse($_[0])});
my $base = $res->base;
return(map { $_ = url($_, $base)->abs; } @href);
}
SALUDOS