我需要定期登录并从特定站点抓取一些数据。
我编写了一个CasperJS脚本在Heroku上运行,以解决这个问题。

这是我想要做的:

app.get('/test', function(request, response) {
  scrapeStuff(function(data) {
    response.send(data);
  });
});


然后,在怪异脚本的最后一步:

spooky.then(function() {
  callback(this.getHTML());
});


不幸的是,由于某些原因,似乎不可能实现,因为传递给scrapeStuff的函数没有在.then()中实现。 (找不到变量:回调)相反,我必须使用this.emit()并使用spooky.on对其进行监视-您可以看到an example of how this is done here

使用emit的问题是我想根据请求接收抓取页面的HTML。因此,我想访问/scrape,然后等待其工作10秒钟,然后接收该页面,而不是调用它,并假设它成功了,并请求另一个URL来最终获取HTML。

可以用SpookyJS完成吗?也许有直接使用CasperJS的更好的方法。

最佳答案

使用SpookyJS时,它们是3个级别的上下文:节点(spooky),casper和网页本身。

您可以在3个上下文之间传递数据,但是它将被序列化和未序列化,因此您仅限于纯JSON对象。

有关其工作方式的详细介绍,请参见https://github.com/SpookyJS/SpookyJS/wiki/Introduction

10-06 04:03