• Publicidad

Problema de ejecución

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

Problema de ejecución

Notapor isidrobu » 2011-04-10 20:37 @900

Buenas, he intentado ejecutar el siguiente código que he visto en otro apartado del foro. Se trata de sacar si esta un número de lotería en la web.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.          use WWW::Mechanize;
  3.          use HTML::TableExtract;
  4.        
  5.         use strict;
  6.         use warnings;
  7.        
  8.         $|++; # no caché
  9.        
  10.         # Constantes ################################################################
  11.         my $URL = 'http://onlae.terra.es/loteria/navidad07/PrincipalD.htm';
  12.         my $fichero_de_salida = 'administraciones.txt';
  13.        
  14.         #############################################################################
  15.      
  16.         # Vemos si el usuario nos manda un argumento, o le informamos
  17.         # de cómo funciona este programa
  18.         # Hay dos formas de indicarlo: o números sueltos, separados por comas,
  19.         # y/o un rango, separados por '..'.
  20.         @ARGV or die "Uso: $0 [<número[,número,...]|<número>..<número>]\n";
  21.        
  22.         # Leemos los números indicados por el usuario
  23.         my $numeros_a_buscar = shift @ARGV;
  24.        
  25.         # Lo evaluamos como una posible lista de números
  26.         my @numeros_a_buscar = eval ($numeros_a_buscar);
  27.        
  28.         # Hacemos un bucle por todos ellos
  29.         foreach my $numero ( @numeros_a_buscar ) {
  30.             next if $numero > 84999;                    # Límites de números permitidos
  31.             next if $numero < 0;
  32.        
  33.             obtener_datos_del($numero);
  34.        
  35.             sleep 3 + rand 3
  36.                 if $numero != $numeros_a_buscar[-1];    # Somos amables... esperamos
  37.         }
  38.        
  39.         sub obtener_datos_del {
  40.             my $numero = shift;
  41.        
  42.             print "Obteniendo información del número $numero...";
  43.        
  44.             my $mech = WWW::Mechanize->new();           # Nuestro robot
  45.             $mech->agent_alias('Linux Mozilla');        # Vamos a despistar un poco
  46.        
  47.             $mech->get($URL)
  48.                 or die "ERROR: No me pude conectar al $URL\n";
  49.        
  50.             $mech->submit_form(                         # Solicitamos información
  51.                with_fields => {'numero' => $numero},
  52.             );
  53.        
  54.             $mech->success()                            # ¿Todo va bien?
  55.                 or die "ERROR: No pude hacer la petición para el número $numero\n";
  56.        
  57.             my $pagina = $mech->content();              # A ver qué tenemos...
  58.        
  59.             # Nos construímos el extractor de tablas y buscamos la que nos interesa
  60.             my $tabla_extractor
  61.                 = HTML::TableExtract->new(
  62.                     headers => [qw(Admon. Domicilio Localidad Provincia Teléfono)],
  63.                 );
  64.             $tabla_extractor->parse($pagina);           # Adelante... parsea...
  65.        
  66.             my ($tabla) = $tabla_extractor->tables()    # Tabla obtenida
  67.                 or die "ERROR: No encontré la tabla de Administraciones\n";
  68.        
  69.             # Extraemos información de la tabla
  70.             # Y la guardamos en el fichero de salida
  71.             open ADMON,">>$fichero_de_salida"
  72.                 or die "ERROR: No puedo añadir a $fichero_de_salida: $!\n";
  73.        
  74.             # Primero, una cabecera
  75.             print ADMON "Administraciones con el número $numero:\n";
  76.        
  77.             # Luego, la información de la tabla
  78.             foreach my $row ($tabla->rows) {
  79.                 print ADMON join(',', @$row), "\n";
  80.             }
  81.        
  82.             close ADMON;
  83.        
  84.             print " Ok\n";
  85.         }
  86.        
  87.         __END__
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El fallo que me da en la terminal es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Obteniendo información del número 8434...Can't locate object method "redirects" via package "HTTP::Headers" at /usr/share/perl5/HTTP/Message.pm line 533.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
isidrobu
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-04-03 14:15 @635

Publicidad

Re: Problema de ejecución

Notapor explorer » 2011-04-11 08:16 @386

La página original de onlae.terra.es ya no existe. Por eso recibes una cabecera de redirección a otra página.

Habría que cambiar todo el programa para adaptarlo a las nuevas circunstancias.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron