【问题标题】:What's the best way to write a maintainable web scraping app?编写可维护的网络抓取应用程序的最佳方法是什么?
【发布时间】:2010-12-14 14:22:04
【问题描述】:

我不久前写了一个 perl 脚本,它登录到我的网上银行,每天通过电子邮件向我发送我的余额和一个小结单。我发现它对于跟踪我的财务状况非常有用。唯一的问题是我只使用 perl 和 curl 编写它,它非常复杂且难以维护。在我的银行更改了他们的网页的几次实例之后,我厌倦了调试它以使其保持最新状态。

那么,编写这样一个易于维护的程序的最佳方式是什么?我想用 Perl 或 Java 编写一个设计精良的版本,当银行不可避免地摆弄他们的网站时,它很容易更新。

【问题讨论】:

    标签: perl webforms screen-scraping html-content-extraction


    【解决方案1】:

    使用 perl 和 web::scraper 包: link text

    【讨论】:

      【解决方案2】:

      这里有一个当前最新的 Ruby 实现:

      http://github.com/warm/NatWoogle

      【讨论】:

        【解决方案3】:

        如果我要给你一个建议,那就是使用XPath 来满足你所有的抓取需求。避免使用正则表达式。

        【讨论】:

        • +1 从长远来看,使用原生 HTML 解析器肯定会更好。
        • 是的,我之前的解决方案是正则表达式繁重,如果可能的话,我一定会避免这种情况。
        • 除非 HTML 非常特殊或者你使用的是HTML::TreeBuilder::XPath,否则这肯定会令人沮丧。
        【解决方案4】:

        许多银行以标准格式发布其数据,MS Money 或 Quicken 等个人理财软件包通常使用该格式下载交易信息。您可以使用相同的 API 查找该挂钩并下载,然后在您的终端解析数据(例如,使用 Spreadsheet::ParseExcel 解析 Excel 文档,使用 Finance::QIF 加速文档)。

        编辑(回复评论):您是否考虑过联系您的银行并询问他们如何以编程方式登录您的帐户以下载财务数据?许多/大多数银行都有一个用于此的 API(Quicken 等使用,如上所述)。

        【讨论】:

        • 您好,感谢您的回答,但它并没有真正解析我所追求的银行数据,它正在登录并自动绕过我想要的银行环境。
        【解决方案5】:

        WWW::MechanizeWeb::Scraper 的组合是让我工作效率最高的两个工具。 catalyzed.org

        上有一篇关于这种组合的好文章

        【讨论】:

        • +1 用于 Web::Scraper。我发现它很难安装,但我已经能够用大约 3 行 Web::Scraper 替换巨大的抓取脚本。
        【解决方案6】:

        在 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);
        

        【讨论】:

          【解决方案7】:

          嗯,刚找到

          Finance::Bank::Natwest

          这是专门为我的银行准备的 perl 模块!没想到会这么简单。

          【讨论】:

          • 嗯,可悲的是,perl 脚本看起来不再有效了。最后更新于 2003 年!
          • 哇。那是旧的。不过虽然明明没有维护,但说不定还能维护?
          • 是的,它看起来写得很好。我已经给作者发了电子邮件,问他是否还在个人使用它。
          • 我强烈反对使用这种脚本。大多数银行网站使用 PIN 码/密码的随机部分来获取访问权限。这是为了防御键盘记录器、间谍软件和中间人攻击。当心!!!
          • 是的,我知道存在安全隐患,显然我会解析银行的网页以找出他们想要的密码数字。它自己的密码存储在使用 GPG 代理的 GPG 加密文件中,以便轻松访问。我知道这是默默无闻的安全,但我的系统是如此独特,我不太害怕入侵。
          猜你喜欢
          • 2014-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-24
          • 2019-11-18
          • 2010-09-23
          • 1970-01-01
          相关资源
          最近更新 更多