El programa no funciona porque Google ha cambiado la forma de responder, el código HTML de las páginas de búsqueda.
Un extracto:
Using html4strict Syntax Highlighting
<h3 class=r><a href="http://www.microsiervos.com/archivo/peliculas-tv/ola-gigante-filmada-desde-abajo.html" class=l onmousedown="return clk(this.href,'','','res','57','')">Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Por eso, la condición del while() siempre falla y no saca nada.
Tendrías que modificar la expresión regular para capturar esos nuevos enlaces.
Algo así:
Using perl Syntax Highlighting
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
my $busqueda = new HTTP::Request GET =>"http://www.google.es/search?hl=es&q=ola&start=50&sa=N";
my $resultado = $ua->request($busqueda);
$ua->timeout(7);
my $result = $resultado->content;
while ($result =~ m/<h3 class=.*?<a href="([^"]+).*?>(.*?)<\/a>/g) {
my ($enlace, $texto) = ($1, $2);
print "$enlace - $texto\n";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
que queda más corto así:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple qw($ua get);
$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
my $resultado = get("http://www.google.es/search?hl=es&q=ola&start=50&sa=N");
while ($resultado =~ m/<h3 class=.*?<a href="([^"]+).*?>(.*?)<\/a>/g) {
my ($enlace, $texto) = ($1, $2);
print "$enlace - $texto\n";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero, para hacer
Web scraping, prefiero WWW::Mechanize:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
$mech->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
$mech->get("http://www.google.es/search?hl=es&q=ola&start=50&sa=N");
my @enlaces = $mech->find_all_links( class => 'l' );
for my $enlace (@enlaces) {
print $enlace->url() , " : ";
print $enlace->text(), "\n";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
De todas formas, lo correcto es lo indicado al final por netsoul: usar un módulo concreto para Google.