• Publicidad

Obtener de un documento HTML las etiquetas <a>

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Obtener de un documento HTML las etiquetas <a>

Notapor Julioc86 » 2006-04-15 19:13 @842

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?
Julioc86
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2006-04-15 19:09 @839

Publicidad

Notapor g013m » 2006-04-15 23:34 @024

Resistirse es inútil, al final todos serán asimilados.
http://g013m.unplug.org.ve
g013m
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2005-07-15 23:11 @007

Re: Obtener de un documento HTML las etiquetas <a>

Notapor explorer » 2006-04-16 08:25 @392

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

## Leemos el documento HTML
$doc = get("http://perlenespanol.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: Seleccionar todo
#!/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.
Última edición por explorer el 2006-04-16 11:03 @502, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2006-04-16 10:51 @494

O puedes hacer algo como esto:
Código: Seleccionar todo
my $html = "<a href="http://perlenespanol.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.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor Perl user » 2006-04-16 19:04 @836

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,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados