我需要定期登录并从特定站点抓取一些数据。
我编写了一个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。