【发布时间】:2016-08-23 07:19:58
【问题描述】:
我对@987654323@ 一无所知,直到我学习使用 casperjs 从网站上抓取一些内容并将它们保存到文件中。根据网上的一些例子,我写了这个文件scrape.js(json数据经过测试,与问题无关):
var fs = require('fs');
var url = "http://w.nycweb.io/index.php?option=com_k2&view=itemlist&id=4&Itemid=209&format=json";
var casper = require('casper').create();
casper.start(url,function(){
var json = JSON.parse(this.fetchText('pre'));
var jsonOfItems={},items = json.items;
items.forEach(function(item){
jsonOfItems[item.id] = item.introtext.split('\n');
})
fs.write('videoLinks.json',JSON.stringify(jsonOfItems),function(err){
if (err) console.log(err);
console.log('videoLinks.json saved');
})
});
casper.run();
当我在 Ubuntu 14.04 服务器的命令行中执行 casperjs scrape.js 时,我不会按预期看到文件已保存消息,尽管文件已正确保存。所以这是第一个问题:为什么回调根本没有运行?
其次,我也试过fs.writeFile,但是当我用它替换fs.write时,文件根本没有保存,也没有任何错误信息。
我确实注意到,在 casper 文档中,据说 casper 不是 node.js 模块,并且 node.js 的某些模块将不可用,但我怀疑这与我的问题有关。而且我认为值得一提的是,以前当我运行此脚本时,我只会得到类似
的响应我是“fs”模块。
我必须按照这个question 在全球范围内重新安装fs 模块才能使其正常工作。
【问题讨论】:
-
对了,顺便说一下(
var json = JSON.parse(this.fetchText('pre'));)我在抓取页面时获取json数据感觉有点尴尬,如果您知道更好的方法,请随时发表评论。 -
CasperJS 与 node.js 无关,因为它建立在 PhantomJS 之上,而 PhantomJS 与 node.js 具有不同的环境。与 PhantomJS 捆绑在一起的
fs模块中根本没有fs.writeFile:phantomjs.org/api/fs