2009-04-03 10 views

Respuesta

6

Si está familiarizado con jQuery es posible que desee echa un vistazo a pQuery, lo que hace que este muy fácil:

## print every <h2> tag in page 
use pQuery; 

pQuery("http://google.com/search?q=pquery") 
    ->find("h2") 
    ->each(sub { 
     my $i = shift; 
     print $i + 1, ") ", pQuery($_)->text, "\n"; 
    }); 

También hay HTML::DOM.

Sin embargo, haga lo que haga, no use expresiones regulares para esto.

4

He usado HTML Table Extract en el pasado. Personalmente me parece un poco torpe de usar, pero tal vez no entendí bien el modelo de objetos. que suelen utilizar esta parte del manual para examinar los datos:

use HTML::TableExtract; 
$te = HTML::TableExtract->new(); 
$te->parse($html_string); 

    # Examine all matching tables 
    foreach $ts ($te->tables) { 
     print "Table (", join(',', $ts->coords), "):\n"; 
     foreach $row ($ts->rows) { 
      print join(',', @$row), "\n"; 
     } 
    }` 
+0

HTML :: TableExtract es muy mágico.Una gran característica es poder seleccionar tablas especificando el contenido de las celdas de encabezado y poder mantener solo las columnas que le interesan. –

0

utilizo LWP::UserAgent durante la mayor parte de mi pantalla raspado necesidades. También puede acoplar eso con HTTP::Cookies si necesita el soporte de Cookies.

Aquí hay un ejemplo simple de cómo obtener la fuente.

use LWP; 
use HTTP::Cookies; 
my $cookie_jar = HTTP::Cookies->new; 
my $browser = LWP::UserAgent->new; 
$browser->cookie_jar($cookie_jar); 

$resp = $browser->get("https://www.stackoverflow.com"); 
if($resp->is_success) { 
    # Play with your source here 
    $source = $resp->content; 
    $source =~ s/^.*<table>/<table>/i; # this is just an example 
    print $source;      # not a solution to your problem. 
} 
3

A pesar de que he hecho por lo general esto con LWP/LWP::Simple, el módulo actual 'preferido' para cualquier tipo de página web raspado en Perl es WWW::Mechanize.

+0

David: ¿Puede ampliar esto? Siempre pensé que WWW :: Mechanize era más para las pruebas automatizadas. ¿Qué lo pone por encima? –

+0

WWW :: Mechanize es para cualquier tipo de interacción con un sitio web. Nunca fue dirigido solo en pruebas automatizadas. –

+0

Sin embargo, Test :: WWW :: Mechanize * está * dirigido solo a pruebas automatizadas. Es un envoltorio alrededor de WWW :: Mechanize. –

1

no me refiero a arrastrar un hilo muerto pero cualquier persona buscando en Google a través de este hilo también debe pago y envío WWW::Scripter - 'Para los sitios web de secuencias de comandos que tienen las secuencias de comandos'

datos remotos felices agregación;)

1

Take un vistazo a la mágica Web::Scraper, es LA herramienta para raspado de la web.

0

Salida este pequeño ejemplo de web raspado con Perl: link text

Cuestiones relacionadas