use Template::Extract;

Fa un temps que sóc aficionat a fer scripts que fan screen scraping (web spidering). Els meus primers tantejos van ser amb el fantàstic mòdul LWP. Amb una mica de paciència, fent GETs i POSTs on tocava, url-encodejant i en alguns casos usant un grapat d’expressions regulars podia extreure les dades d’una pàgina web i mostrar-les en el format que m’interessava, emmagatzemar-les en una BD, etc…

Un bon dia vaig descobrir una altra perla interessant a CPAN: WWW::Mechanize, que es comporta com un navegador (sense javascript). Alguns mètodes de l’API són:

$mech->follow( $link );
$mech->click( $button );
$mech->set_fields( %field_values );
$mech->back();

Com podeu veure no és necessària una llarga explicació (imho), el seu comportament és el que us podrieu trobar en qualsevol navegador. Aquest mòdul ens simplifica força les accions que podem fer en el navegador, però el parseig l’hem de fer a mà igualment… fins que un bon dia, apareix a la meva vida en Template::Extract :)

Tothom que hagi fet algun CGI o programat amb templates sap generar codi html, doncs aquest mòdul fa l’operació inversa. Donat un document HTML ja format i un template que construïm nosaltres, ens extreu la informació que hem indicat. La sinopsi del mòdul mostra l’ús posant com exemple slashdot & microsoft.

Per acabar d’enroscar tot això, el mateix autor d’extract (Autrijus Tang) també va programar Template::Generate. Aquest mòdul ens genera el template ! Només cal indicar-li la informació d’exemple que voldriem extreure i ens retorna un possible template que fa match, ja no caldria doncs ni mirar-nos el codi font de la pàgina… maquíssim ! :)

Alguns preguntareu a que ve exactament tot això… més en el pròxim post ! :)