在我学习使用casperjs从网站上抓取一些内容并将其保存到文件之前,我对fs
一无所知。在网络上的一些例子之后,我写了这个文件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
模块才能使其正常运行。
答案 0 :(得分:1)
fs.write需要一个文件描述符,你试图给它一个文件名。试试fs.writeFile。 https://nodejs.org/dist/latest-v4.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback
编辑:哦,你试过了。你确定它没有像根目录那样写吗?在那里试过一条完整的道路?你在运行什么版本的节点?