以下代码适用于NightmareJS和NodeJS。但是,我不想只是在console.log中获取JSON结果,而是希望将我的JSON结果保存到本地文件中。
我知道Nightmare中的.html选项,但我不想要整个页面,我希望它以JSON格式。有关将ticketData保存到本地文件的任何帮助吗?
nightmare
.goto('https://www.stubhub.com/')
.wait(3000)
.type('.inputbox', 'chicago bulls')
.mouseover('.search-action-button')
.click('.search-action-button')
.wait(3000)
.evaluate(function () {
var ticketData = {}
ticketData.team = ([].slice.call(document.querySelectorAll('.event-title'))).map( function(x) {
return x.innerText
});
ticketData.date = ([].slice.call(document.querySelectorAll('.date-stamp-month-dd'))).map( function(x) {
return x.innerText
});
ticketData.price = ([].slice.call(document.querySelectorAll('.price'))).map( function(x) {
return x.innerText
});
ticketData.url = ([].slice.call(document.querySelectorAll('.event-link'))).map( function(x) {
return x.href
});
return ticketData;
})
.then(function (data) {
console.log('Data = ' + JSON.stringify(data));
return nightmare
})
.catch(function (error) {
console.error('', error);
});
答案 0 :(得分:4)
您需要使用fs module个phantomjs和fs.write function:
var fs = require('fs');
fs.write('ticket_data', JSON.stringify(data), 'w');
或fs module Node.JS和fs.writeFileSync function:
var fs = require('fs');
fs.writeFileSync('ticket_data', JSON.stringify(data));
例如:
var fs = require('fs');
.then(function (data) {
fs.writeFileSync('ticket_data', JSON.stringify(data));
// fs.write('ticket_data', JSON.stringify(data), 'w');
// console.log('Data = ' +JSON.stringify(data))
});
答案 1 :(得分:2)
我有完全相同的需求,并使用以下语法来"漂亮的打印" JSON内容到文件。
var writeToFile = function() {
fs.writeFile(setupFilePath, JSON.stringify(data, null, 4), function(err) {
if(err) {
// handle error
}
});
}
这里要注意的一件事是传递给JSON.stringify()的附加参数 - 这将缩进每行4个空格以获得额外的可读性。关于here的更多信息。
我必须非常清楚我的文件路径,其定义如下:
var setupFilePath = __dirname + '/../../setup_info.json';