• Publicidad

Pregunta sobre extraer información de una página

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Pregunta sobre extraer información de una página

Notapor BigBear » 2012-11-24 12:44 @572

Estaba viendo la siguiente página: http://mp3skull.com/mp3/bones_now.html El problema es que yo quiero listar toda la tabla en la que están los nombres de las canciones, el peso y los otros datos. El tema de descargar lo solucioné usando una expresión regular para que capture todos los .mp3" pero el tema de los datos de las tablas no sé cómo hacerlo.

¿ Alguien tiene alguna idea ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Pregunta sobre extraer información de una página

Notapor explorer » 2012-11-24 14:20 @639

Este es un bonito ejemplo para usar Web::Scraper:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use URI;
  4. use Web::Scraper;
  5.  
  6. # Definimos cómo queremos rascar
  7. my $cancionero = scraper {
  8.     process 'div#song_html', 'canciones[]' => scraper {
  9.         process 'div.left', 'pesos' => sub {
  10.             my $elemento = shift;
  11.             #$elemento->delete_ignorable_whitespace();
  12.             my @info = grep { ref($_) eq '' } $elemento->content_list;
  13.             return [ @info ];
  14.         };
  15.         process 'div[style="font-size:15px;"]', titulo => 'TEXT';
  16.         process 'a[style="color:green;"]', enlace => '@href';
  17.     };
  18. };
  19.  
  20. # Rascamos
  21. my $res = $cancionero->scrape( URI->new("http://mp3skull.com/mp3/bones_now.html") );
  22.  
  23. # Sacamos las canciones
  24. for my $cancion (@{$res->{canciones}}) {
  25.     say "$cancion->{titulo} => ";
  26.     my @pesos = @{ $cancion->{pesos} };
  27.     for my $peso (@pesos) {
  28.         $peso =~ s/^\s+//;
  29.         $peso =~ s/\s+$//;
  30.  
  31.         if ($peso =~ /kbps/i) {
  32.             say "\t", "Velocidad: [$peso]";
  33.         }
  34.         elsif ($peso =~ /:/) {
  35.             say "\t", "Duración:  [$peso]";
  36.         }
  37.         elsif ($peso =~ /[kmg]b/i) {
  38.             say "\t", "Tamaño:    [$peso]";
  39.         }
  40.         else {
  41.             say "\t", "xxxx:      [$peso]";
  42.         }
  43.     }
  44.     say "\t", $cancion->{enlace};
  45. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@joaquinferrero:~/Documentos/Desarrollo> ./kk.pl
Discovery Now - bionic bones mp3 =>
        Velocidad: [256 kbps]
        Duración:  [1:30]
        Tamaño:    [2.79 mb]
        http://www.whro.org/home/html/podcasts/discoverynow/041408.mp3
Sean Bones - 'Here Now' mp3 =>
        Velocidad: [128 kbps]
        Duración:  [3:28]
        Tamaño:    [3.19 mb]
        http://serve.castfire.com/audio/878039/sean-bones-here-now_2012-02-23-174939.128.mp3
Discovery Now - bionic bones mp3 =>
        Velocidad: [256 kbps]
        Duración:  [00:01:30]
        Tamaño:    [2.8 mb]
        http://whro.org/home/html/podcasts/discoverynow/041408.mp3
Sean Bones - Here Now mp3 =>
        Tamaño:    [5.02 mb]
        http://www.hulkshare.com/dl/4t42l4kxi811/sean_bones_-_here_now.mp3
Fuego Ft. Amara - Lo Que Quiero (Prod. By Bones, Now & Laterz) (http://Www.StiloCaro.Com) mp3 =>
        Tamaño:    [4.43 mb]
        http://www.hulkshare.com/dl/w86wxq8bl0n4/fuego_ft._amara_-_lo_que_quiero_%28prod._by_bones%2c_now_%26_laterz%29.mp3
Sean Bones - Here Now mp3 =>
        Velocidad: [160 kbps]
        Duración:  [3:27]
        Tamaño:    [3.95 mb]
        http://myspoonful.com/wp-content/uploads/Sean-Bones-Here-Now.mp3
Frankie Bones - Bonesbreaks Vol. 2 (B2) On The Beat Now-freestyle na veia mp3 =>
        Duración:  [4:40 mins]
        Tamaño:    [6.41 mb]
        http://dc203.4shared.com/img/564370108/97ff8470/dlink__2Fdownload_2FS4XeLchH_3Ftsid_3D20121124-21720-fad47fd0/preview.mp3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo de sacar el enlace, gracias a que es de color verde... ha sido de pura chiripa... ;)
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

Re: Pregunta sobre extraer información de una página

Notapor BigBear » 2012-11-24 15:20 @680

Gracias por la ayuda, explorer, pero quería preguntarte si no tendrías un ejemplo como este pero sin usar ese módulo porque tiene muchas dependencias. Lo digo para que sea más fácil de usar el programa para quien quiera usarlo, no porque me dé flojera instalarlos.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Pregunta sobre extraer información de una página

Notapor BigBear » 2012-11-26 16:04 @711

Bueno, me vi forzado a usar mi limitado cerebro :D , dejo mi improvisada solución para que me digas en qué puedo mejorarla; me refiero a ese raro espacio en la segunda expresión regular.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #http://mp3skull.com/mp3/bones_now.html
  2.  
  3. #!usr/bin/perl
  4.  
  5. use LWP::UserAgent;
  6.  
  7. my $nave = LWP::UserAgent->new;
  8. $nave->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12");
  9. $nave->timeout(5);
  10.  
  11. my $code = toma("http://mp3skull.com/mp3/bones_now.html");
  12.  
  13. chomp $code;
  14.  
  15. my @nombres;
  16. my @datas;
  17. my @links;
  18.  
  19. while($code=~/<div style="font-size:15px;"><b>(.*)<\/b><\/div>/mig) {
  20. my $nombre = $1;
  21. #print "name : $nombre\n";
  22. push(@nombres,$nombre);
  23. }
  24.  
  25. while($code=~/<!-- info mp3 here -->
  26.                                 (.*)                    <\/div>/mig) {
  27. my $data = $1;
  28. $data=~s/<br \/>/ /;
  29. $data=~s/<br \/>/ /;
  30. #print "data : $data\n";
  31. push(@datas,$data);
  32. }
  33.  
  34.  
  35. while($code=~/<a href=\"(.*)\.mp3\"/mig) {
  36. my $link = $1.".mp3";
  37. #print "link : $link\n";
  38. push(@links,$link);
  39. }
  40.  
  41. my $encontrados = int(@nombres) - 1;
  42.  
  43. for my $aca(0..$encontrados) {
  44. print "[Names] : $nombres[$aca]\n";
  45. print "[Data] : $datas[$aca]\n";
  46. print "[Link] : $links[$aca]\n\n";
  47. }
  48.  
  49. sub toma {
  50. return $nave->get($_[0])->content;
  51. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Pregunta sobre extraer información de una página

Notapor explorer » 2012-11-26 17:49 @784

\s+
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

Re: Pregunta sobre extraer información de una página

Notapor BigBear » 2012-11-26 19:02 @835

:shock:

Lo intenté aplicando de este forma y no devuelve nada:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while($code=~/<!-- info mp3 here -->(\s+)<\/div>/mig) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


también de esta y nada:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while($code=~/<!-- info mp3 here -->(.*)<\/div>/migs) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿ qué estoy haciendo mal ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Pregunta sobre extraer información de una página

Notapor explorer » 2012-11-26 20:16 @886

Prueba con esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     while ($code =~ /<!-- info mp3 here -->\s+(.*?)<\/div>/migs) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Pregunta sobre extraer información de una página

Notapor BigBear » 2012-11-27 09:52 @453

Listo, gracias por la ayuda.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

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

cron