• Publicidad

Buscar en Google

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

Buscar en Google

Notapor seguridadenmimail » 2012-04-22 20:47 @907

Estimados,
Los molesto porque me gustaría hacer que el siguiente script me guarde los resultados en archivos diferentes y no como ahora todo en uno solo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. BEGIN {
  3.     eval "use LWP::Simple";
  4.     if ($@) {
  5.         warn "Error al cargar modulo: LWP::Simple\n"
  6.             . "Instalar Modulo:\n"
  7.             . "\t\tcpan\n"
  8.             . "\t\tcpan> install LWP::Simple\n";
  9.         exit();
  10.     }
  11. }
  12.  
  13. use LWP::Simple;
  14.  
  15. sub unescape {
  16.     my ($str) = splice(@_);
  17.     $str =~ s/\\u(.{4})/chr(hex($1))/eg;
  18.     return $str;
  19. }
  20.  
  21. ## Archivo Externo
  22. open $FILE, '<', $ARGV[0] or die $!;
  23. @archivos = <$FILE>;
  24. close $FILE;
  25.  
  26. $g = $ARGV[1];
  27. chomp $g;
  28.  
  29. ## reporte
  30. open( F, ">> reporte.txt" );
  31.  
  32. if ( @ARGV != 2 ) {
  33.     die "Uso: $0 <archivo> <cantidad>\n" . "     <archivo>\n" . "     <cantidad>\n";
  34. }
  35. else {
  36.     for $archivo (@archivos) {
  37.         chomp $archivo;
  38.         $buscar = "$archivo";
  39.         chomp $buscar;
  40.  
  41.         for ( $j = 1; $j <= "$g"; ++$j ) {
  42.             $c = get("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&start=$j&rsz=large&q=$buscar");
  43.             while ( $c =~ s/"unescapedUrl":"([^"]*)"// ) {
  44.                 @url = unescape($1);
  45.                 my %tmp = map { $_, 0 } @url;
  46.                 @url = sort( keys %tmp );
  47.                 print F "@url\n";
  48.                 print "@url\n";
  49.             }
  50.         }
  51.     }
  52. }
  53.  
  54.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


externo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
google.com
perlenespanol.com
twitter.com
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Ejecución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl google_search.pl externo.txt
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Mi idea es que me cree tres archivos con los nombres de los dominios que tengo dentro de "externo".

Saludos.
Última edición por explorer el 2012-04-23 07:13 @342, editado 1 vez en total
Razón: Formateado de código con Perltidy
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

Re: Buscar en Google

Notapor explorer » 2012-04-23 11:42 @529

Supongo que será en la línea 40, una vez que sabemos el nombre del archivo.

Haces un open(F) en lugar de en la línea 30, la 47 la dejas como está, y pones el close(F) entre la 50 y 51.
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: Buscar en Google

Notapor seguridadenmimail » 2012-04-24 11:00 @500

Gracias por la ayuda.

Ahora tengo un nuevo problema, el contenido de la búsqueda es guardada en su totalidad en cada archivo y no solamente la perteneciente a su búsqueda.

Les dejo el script "nuevo"

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. BEGIN {
  3.     eval "use LWP::Simple";
  4.     if ($@) {
  5.         warn "Error al cargar modulo: LWP::Simple\n"
  6.             . "Instalar Modulo:\n"
  7.             . "\t\tcpan\n"
  8.             . "\t\tcpan> install LWP::Simple\n";
  9.         exit();
  10.     }
  11. }
  12.  
  13. use LWP::Simple;
  14.  
  15. sub unescape {
  16.     my ($str) = splice(@_);
  17.     $str =~ s/\\u(.{4})/chr(hex($1))/eg;
  18.     return $str;
  19. }
  20.  
  21. ## Archivo Externo
  22. open $FILE, '<', $ARGV[0] or die $!;
  23. @archivos = <$FILE>;
  24. close $FILE;
  25.  
  26. $g = $ARGV[1];
  27. chomp $g;
  28.  
  29. if ( @ARGV != 2 ) {
  30.     die "Uso: $0 <archivo> <cantidad>\n";
  31. }
  32. else {
  33.  
  34.     for $archivo (@archivos) {
  35.         chomp $archivo;
  36.  
  37.         open( F, ">> $archivo.txt" );
  38.         for ( $j = 1; $j <= "$g"; ++$j ) {
  39.             $c = get("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&start=$j&rsz=large&q=$archivo");
  40.             while ( $c =~ s/"unescapedUrl":"([^"]*)"// ) {
  41.                 push( @url, unescape($1) );
  42.             }
  43.             foreach $url (@url) {
  44.                 print F "$url\n";
  45.             }
  46.         }
  47.     }
  48.  
  49. }
  50.  
  51.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Buscar en Google

Notapor explorer » 2012-04-24 11:27 @519

Con la opción '>>' estás agregando, no sobreescribiendo los archivos de salida.
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: Buscar en Google

Notapor seguridadenmimail » 2012-04-24 11:52 @536

El problema que modificando como bien me comentas, el primer archivo tiene su contenido que eso está perfecto, pero el segundo tiene todo el contenido y no solo el de él.

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Buscar en Google

Notapor explorer » 2012-04-24 12:04 @544

¡Ah, claro!

No inicializas el valor de @url en cada vuelta. Siempre va creciendo en la línea 41.

Debes poner un @url = () justo después del open() de la línea 37.
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: Buscar en Google

Notapor seguridadenmimail » 2012-04-24 12:44 @572

¡¡Muchas gracias!!
Ya funciona.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Re: Buscar en Google

Notapor explorer » 2012-04-24 16:55 @747

Deberías poner un close F; después de la llave del for() de la línea 46.
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


Volver a Básico

¿Quién está conectado?

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

cron