Hola a todos..
Necesito averiguar por medio de perl los links existentes en un documento...
como puedo hacer esto...
| |||
links de un documento Hola a todos.. Necesito averiguar por medio de perl los links existentes en un documento... como puedo hacer esto...
__________________ La vida es el presente, pero para trabajar en su futuro... :cool: Suerte y Pulso.... :cool: |
| |||
Cita:
Iniciado por monoswim Sería algo así...(Lo escribo de memoria, puede tener errores)
Código:
Lo escribí mientras te respondía, no lo probé...Hacelo vos...jeje#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); 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 |