2009-11-09 235 views
5

前段時間我寫了一個perl腳本,它登錄到我的網上銀行並每天給我發電子郵件給我餘額和一個小型報表。我發現它對於追蹤我的財務狀況非常有用。唯一的問題是我只是使用perl和curl來編寫它,它很複雜,很難維護。在我的銀行改變他們的網頁的幾個實例之後,我厭倦了調試它以保持它的最新狀態。編寫可維護的網頁抓取應用程序的最佳方式是什麼?

那麼編寫這樣一個程序的最好方法是什麼,以便易於維護?我想用Perl或Java編寫一個很好的工程設計版本,當銀行不可避免地擺弄他們的網站時,這將很容易更新。

回答

13

在Perl中,類似WWW::Mechanize的東西已經可以使您的腳本更加簡單和健壯,因爲它可以在網站以前的響應中找到HTML表單。您可以填寫這些表格以準備新的請求。例如:

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

嗯,剛剛發現

Finance::Bank::Natwest

這是一個Perl模塊專門針對我的銀行!沒想到它會那麼簡單。

+0

嗯,看起來並不像Perl腳本不再工作可悲的。最後更新2003! – Benj 2009-11-09 11:31:35

+0

哇。那很舊。但是,儘管它顯然沒有得到維護,它仍然可以維持? – innaM 2009-11-09 11:52:59

+0

是的,它看起來寫得很好。我通過電子郵件向作者詢問他是否仍然親自使用它。 – Benj 2009-11-09 12:03:22

6

如果我給你一個建議,那就是使用XPath來滿足你的所有需求。避免使用正則表達式。

+1

+1從本質上來說,使用本地HTML解析器的東西從長遠來看會更好。 – bobince 2009-11-09 11:58:27

+0

是的,我以前的解決方案是regexp沉重,如果可能的話,我一定會避免這種情況。 – Benj 2009-11-09 12:01:22

+0

除非HTML是非常特殊的,或者你正在使用'HTML :: TreeBuilder :: XPath',這肯定會令人沮喪。 – 2009-11-09 19:44:42

8

WWW::MechanizeWeb::Scraper組合是兩個工具,讓我最有成效的。 Theres在catalyzed.org

+0

適用於Web :: Scraper。我發現很難安裝,但我已經能夠用大約3行Web :: Scraper替換大量的抓取腳本。 – 2009-11-09 16:58:55

1

很好的文章很多銀行以標準格式發佈他們的數據,這是個人財務包,如MS Money或Quicken通常用於下載交易信息。您可以使用相同的API查找該掛鉤並下載,然後解析數據(例如,使用Spreadsheet::ParseExcel解析Excel文檔,使用Finance::QIF快速解析文檔)。

編輯(回覆評論):您是否考慮聯繫您的銀行並詢問他們如何以編程方式登錄您的賬戶以下載財務數據?許多/大多數銀行都有一個API(如上所述,Quicken等使用該API)。

+0

嗨,謝謝你的回答,但它並沒有真正解析我之後的銀行數據,它正在登錄並自動繞過我想要的銀行環境。 – Benj 2009-11-09 19:27:22

相關問題