• Publicidad

Bajar ficheros de tres en tres

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

Bajar ficheros de tres en tres

Notapor colorado » 2011-01-30 15:51 @702

Tengo este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (URLS, 'urls.txt');
  2. my @urls = <URLS>;
  3. chomp @urls;
  4. close(URLS);
  5.  
  6. open (PROXY, 'proxy.txt');
  7. my @proxy = <PROXY>;
  8. chomp @proxy;
  9. close(PROXY);
  10.  
  11. my $l = @urls;
  12.  
  13.  
  14. for (my $i = 0; $i < @proxy; $i++) {
  15.  
  16. print "\n";
  17. print "$urls[$i % $l]  $proxy[$i]";
  18.  
  19. $ua = new LWP::UserAgent();
  20. $ua->proxy(['http', 'ftp'], "http://$proxy[$i]");
  21. $resp = $ua->request(GET "$urls[$i % $l]")if 0 == ($i+1) % 3;
  22.        
  23.  
  24.  
  25.  
  26. open(ARCHIVO,">>libros.txt");
  27. binmode ARCHIVO;
  28. print ARCHIVO $resp->{_content};
  29. close(ARCHIVO);
  30.  
  31.  
  32.  
  33. };
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo que quería era descargar unos documentos a través de proxies.

Para agilizar el proceso quería descargarlos de tres en tres, es decir, tres descargas simultaneas, utilizando un proxy diferente por cada una de las descargas.

Pero no funciona como quería.

Solo realiza la última descarga por cada bloque de tres.


¿¿Se puede solucionar??

Un saludo
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Publicidad

Re: Bajar ficheros de tres en tres

Notapor explorer » 2011-01-30 16:41 @737

Pero... por ninguna parte vemos threads, fork(), o el uso de POE... ¿cómo quieres hacer varias cosas a la vez si solo sucede una cosa a la vez?

Debes investigar el tema de cómo crear hebras de ejecución, o desplegar copias del mismo programa con fork(), o usar un mininúcleo multitarea como POE.

Por ejemplo, yo a veces he usado Parallel::ForkManager. Aquí tienes un ejemplo sacado de la carpeta de ejemplos de Parallel::ForkManager, donde se descargará todos los enlaces que se le pasen en la línea de comandos o por la entrada estándar (un volcado de un fichero de texto con los enlaces).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use Parallel::ForkManager;
  3. use LWP::Simple;
  4. my $pm=new Parallel::ForkManager(10);
  5. for my $link (@ARGV) {
  6.   $pm->start and next;
  7.   my ($fn)= $link =~ /^.*\/(.*?)$/;
  8.   if (!$fn) {
  9.     warn "Cannot determine filename from $fn\n";
  10.   } else {
  11.     $0.=" ".$fn;
  12.     print "Getting $fn from $link\n";
  13.     my $rc=getstore($link,$fn);
  14.     print "$link downloaded. response code: $rc\n";
  15.   };
  16.   $pm->finish;
  17. };
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: Bajar ficheros de tres en tres

Notapor colorado » 2011-01-30 17:33 @773

De nuevo, gracias por orientarme.

Parece difícil, pero le meteré caña al tema.

Ya te contaré.

Un saludo.
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Re: Bajar ficheros de tres en tres

Notapor explorer » 2011-01-30 17:50 @784

He encontrado dos ejemplos de casi lo mismo: usar Parallel::ForkManager para hacer peticiones simultáneas a varios proxy.

* Scrape the entire High scores
* Proxy Checker
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: Bajar ficheros de tres en tres

Notapor colorado » 2011-01-30 18:39 @819

sip, también googlee un rato y vi los ejemplos.

Fue más fácil de lo que parecía.

Por fin conseguí que funcionara :D

Eres un crack, explorer.

Muchas gracias de nuevo :wink:
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658


Volver a Básico

¿Quién está conectado?

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