我需要定期登录并从特定站点抓取一些数据。我编写了一个CasperJS脚本在Heroku上运行,以便处理它。
下面是我希望能够做到的:
app.get('/test', function(request, response) {
scrapeStuff(function(data) {
response.send(data);
});
});
然后,在幽灵脚本的最后一步:
spooky.then(function() {
callback(this.getHTML());
});
不幸的是,由于某种原因,传递给scrapeStuff
的函数似乎不可能在.then()
内。(找不到变量:callback)相反,我必须使用this.emit()
并使用spooky.on
监视它-您可以在这里看到如何做到这一点的示例。
使用emit的问题是,我想在请求时接收抓取页面的HTML。所以我想访问/scrape
,然后等待10秒,而它的工作和接收页面,不调用它,假设它成功并请求另一个URL最终获得HTML。
这可以用SpookyJS完成吗?也许有一个更好的方法直接使用CasperJS
使用SpookyJS有三个层次的上下文:node (spooky), casper和网页本身。
你可以在3个上下文之间传递数据,但它将被序列化和非序列化,所以你仅限于纯JSON对象。
请参阅https://github.com/SpookyJS/SpookyJS/wiki/Introduction以获得有关其工作原理的详细介绍。