2009-11-09 20 views
5

Escribí un script de Perl hace un tiempo que ingresó a mi banca en línea y me envió por correo electrónico mi saldo y una mini-declaración todos los días. Lo encontré muy útil para hacer un seguimiento de mis finanzas. El único problema es que lo escribí simplemente usando perl y curl, y fue bastante complicado y difícil de mantener. Después de algunas instancias en las que mi banco cambió su página web, me cansé de depurarla para mantenerla actualizada.¿Cuál es la mejor manera de escribir una aplicación web para raspar?

Entonces, ¿cuál es la mejor manera de escribir un programa de tal manera que sea fácil de mantener? Me gustaría escribir una versión muy bien diseñada tanto en Perl como en Java, que será fácil de actualizar cuando el banco inevitablemente juegue con su sitio web.

Respuesta

13

En Perl, algo como WWW::Mechanize ya puede hacer que su script sea más simple y robusto, ya que puede encontrar formularios HTML en respuestas anteriores del sitio web. Puede completar estos formularios para preparar una nueva solicitud. Por ejemplo:

my $mech = WWW::Mechanize->new(); 
$mech->get($url); 
$mech->submit_form(
    form_number => 1, 
    fields  => { password => $password }, 
); 
die unless ($mech->success); 
2

Hmm, acaba de encontrar

Finance::Bank::Natwest

que es un módulo Perl específicamente para mi banco! No esperaba que fuera tan fácil.

+0

Hmm, no se parece a esa secuencia de comandos Perl fonctiona tristemente. Última actualización 2003! – Benj

+0

Wow. Eso es viejo. Pero aunque obviamente no se ha mantenido, aún podría ser mantenible. – innaM

+0

Sí, se ve bastante bien escrito. Le envié un correo electrónico al autor para preguntarle si todavía lo usa personalmente. – Benj

6

Si tuviera que darle un consejo, sería usar XPath para todas sus necesidades de raspado. Evita las expresiones regulares.

+1

+1 definitivamente algo con un analizador HTML nativo va a ser mucho mejor a la larga. – bobince

+0

Sí, mi solución anterior era pesada regular, definitivamente lo evitaré esta vez si es posible. – Benj

+0

A menos que el HTML sea muy excepcional o esté usando 'HTML :: TreeBuilder :: XPath', esto seguramente será frustrante. –

8

Una combinación de WWW::Mechanize y Web::Scraper son las dos herramientas que me hacen más productivo. Hay un buen artículo sobre esa combinación en el catalyzed.org

+0

+1 para Web :: Raspador. Me ha resultado difícil de instalar, pero he podido reemplazar enormes scripts de raspado con aproximadamente 3 líneas de Web :: Scraper. –

1

Muchos bancos publican sus datos en un formato estándar, que es comúnmente utilizado por paquetes de finanzas personales como MS Money o Quicken para descargar información de transacciones. Puede buscar ese enlace y descargar usando la misma API, y luego analizar los datos en su extremo (por ejemplo, analizar documentos Excel con Spreadsheet::ParseExcel, y documentos de Quicken con Finance::QIF).

Editar (responder al comentario): ¿Ha pensado en ponerse en contacto con su banco y preguntarles cómo puede iniciar sesión programáticamente en su cuenta para descargar los datos financieros? Muchos/la mayoría de los bancos tienen una API para esto (que utilizan Quicken, como se describió anteriormente).

+0

Hola, gracias por la respuesta, pero en realidad no se trata de analizar los datos bancarios que busco, sino que se está introduciendo de manera automática en el entorno bancario que deseo. – Benj

Cuestiones relacionadas