Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Obtener de un documento HTML las etiquetas <a>

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Sab Abr 15, 2006 6:13 pm
Julioc86
Perlero Nuevo
Perlero Nuevo
Registrado: 15 Abr 2006
Mensajes: 1
Obtener de un documento HTML las etiquetas <a> Responder citando

Hola necesito obtener de un documento html un arreglo de las etiquetas <a href="...">cualquier cosa</a> lo he intentando con expresiones regulares pero no ha funcionado, necesito obtener todas las direcciones que tiene la web, ¿alguien tiene una idea?
Mensaje Sab Abr 15, 2006 10:34 pm
g013m
Perlero Nuevo
Perlero Nuevo
Registrado: 15 Jul 2005
Mensajes: 15
Responder citando

Hola, quizás puedas echarle una mirada a los siguientes módulos:
http://search.cpan.org/~podmaster/HTML-LinkExtractor-0.13/LinkExtractor.pm
http://search.cpan.org/~gaas/HTML-Parser-3.51/lib/HTML/LinkExtor.pm
http://search.cpan.org/~gaas/HTML-Parser-3.51/lib/HTML/TokeParser.pm

Saludos.
Mensaje Dom Abr 16, 2006 7:25 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

Un ejemplo con HTML::LinkExtor:
Código:
#!/usr/bin/perl -l
use LWP::Simple;
use HTML::LinkExtor;

## Leemos el documento HTML
$doc = get("http://perlenespanol.baboonsoftware.com/foro/index.php");

## Extraemos los enlaces que hay dentro
$extractor = HTML::LinkExtor->new;
$extractor->parse($doc);

## Pintado de sólo los enlaces con marca 'a' y con atributo 'href'
foreach $enlace ( $extractor->links ) {
    ($tag,%links) = @{$enlace};
    next unless $tag eq "a";
    print $links{href} if defined $links{href};
}
HTML::LinkExtractor permite extraer más información (como el texto del enlace).

Con expresiones regulares, se puede intentar con algo sencillo:
Código:
#!/usr/bin/perl -l
$doc = do{ local $/; open F,"index.html"; <F>};
while( $doc =~ /<\s*a.*?href="(.+?)"/sig) {
    print $1;
}

Otro ejemplo en este mismo foro.

Ultima edición por explorer el Dom Abr 16, 2006 10:03 am, editado 1 vez
Mensaje Dom Abr 16, 2006 9:51 am
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

O puedes hacer algo como esto:
Código:
my $html = "<a href="http://perlenespanol.baboonsoftware.com"</a>";
my @todo = split / /, $html;
foreach my $palabra (@todo){
  if($palabra =~ /^href=(.*)$/){
    $palabra =~ s/href="//g;
    $palabra =~ s/"//g;
    $palabra =~ s/\<(a|A)\/\>//g;
    print "Link => ", $palabra, "\n";
  }
}

O algo asi.
Mensaje Dom Abr 16, 2006 6:04 pm
Perl user
Maestro Honorario
Maestro Honorario
Registrado: 03 Nov 2004
Mensajes: 385
Responder citando

Las respuestas donde te pusieron una expresión regular directamente no es mala, pero es la peor solución, para hacer el parsing de una URL/URI con una expresión regular no es TAN sencillo y requiere de mas trabajo que el que te pusieron.

Recomiendo aparte del uso de HTML::LinkExtor como ya te mencionaron, el uso de WWW::Mechanize, el cual solo te costará invocar un sólo método, checa la documentación.

Best regards,
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group