仅在检测到更改时才进行抓取?

Scraping only when a change is detected?

我的银行有一个非常简单的登录系统。使用 casperjs 我已经能够提取我最新的账户余额和我的最后一笔交易。有很多方法可以从 Internet 上抓取数据,我只是用 Casperjs 测试了它 capabilities.I 与银行核实,他们说-只要是我的银行账户,就没问题。

这是我必须处理的技术问题:银行将登录次数限制为每天约 40 次。如果登录次数超过该数量。它会将我锁定在我的帐户之外 6 个小时。 (此外,系统每 20 分钟将我注销一次 - 与操作无关)

我想弄清楚的是: 如果发生交易并且账户余额发生变化,有没有办法只运行抓取功能?

为简单起见,抓取通常会及时进行。我可以实现什么是推送通知样式的抓取机制?

objective 是在每次交易发生时(最多延迟 3-4 分钟)获得 message/email,同时不会被系统锁定。

任何有创意的答案都可以。

不登录怎么知道交易发生了?如果网上银行网站编程良好,您将需要登录。

小算术:

  • ~ 每 24 小时 40 次登录
  • 20 分钟后注销
  • 每 24 小时/39 ~ 37 分钟登录一次,不会有被锁定的风险
  • 这意味着您最多延迟 17 分钟(如果没有新信息,这太过分了 :)

你显然24小时都没有醒。

  • ~ 每 16 小时 40 次登录
  • 20 分钟后注销
  • 每 16 小时/39 ~ 24.6 分钟登录一次,不会有被锁定的风险
  • 这意味着您最多延迟 5 分钟(这似乎可以接受)

与您的银行联系,看他们是否提供 API。如果您的帐户被锁定,他们可能会怀疑您 activity 并永久锁定您的帐户。

由于 CasperJS 是异步的,您将不得不递归地使用您的抓取功能。

var casper = require("casper").create(),
    url = "your bank url",
    counter = 0;

function login(){
    counter++;
    this.thenOpen(url, function(){
        this.fillSelectors("login form selector", {
            "username selector": "username",
            "password selector": "password",
            // more if necessary
        }, true); // automatically submit
    });
}

function scrape(){
    // do your thing
}

function run(){
    if (counter == 39) {
        counter = 0;
        this.wait(8 * 60 * 60 * 1000)
            .then(run);
    } else if (this.exists("selector which shows that you are logged in")) {
        this.then(scrape)
            .wait(30 * 1000)
            .then(run);
    } else if (this.exists("selector which shows that you where automatically logged out")) {
        this.wait(5 * 60 * 1000)
            .then(login)
            .then(run);
    } else {
        this.then(login)
            .then(run);
    }
}

casper.start().then(run).run();