[英]Writing web scraped data to JSON file using NodeJS
我正在编写一个应用程序,该应用程序刮擦粉丝站点中的角色作为练习。 目前,我有一个URL数组,我正在其中循环并抓取所需的数据,然后将此数据输出到output.json文件中以供以后存储。 写入此文件时,格式出现问题。
也许我应该以不同的方式存储数据,我愿意接受有关最佳做法/其他方法的建议。 我只想稍后访问这些数据。
server.js
var express = require('express');
var cheerio = require('cheerio');
var app = express();
var rp = require('request-promise');
var fsp = require('fs-promise');
app.get('/', function(req, res){
urls = [
'fansite.com/boss1', 'fansite.com/boss2'
];
function parse(html) {
var bosses = require('./output.json');
var $ = cheerio.load(html);
$('.page-header__title').filter(function () {
var data = $(this);
name = data.text();
bosses.name = name;
})
return bosses;
}
var append = file => content => fsp.appendFile(file, JSON.stringify(content, null, 2));
urls.forEach(function (url) {
rp(url)
.then(parse)
.then(append('output.json'))
.then(() => console.log('Success'))
.then(res.send('Bosses Updated.'))
.catch(err => console.log('Error:', err));
});
})
app.listen('8081')
console.log('Running on port 8081');
exports = module.exports = app;
output.json
{
}{
"name": "Boss1"
}{
"name": "Boss2"
}
您最好只是修改内存中的javascript对象,然后以覆盖/替换的方式将其全部保存到文件中,而不是附加到文件中(除非您期望文件变得如此之大以至于会损坏)内存限制)。
为此,只需维护数据的内存副本,然后将其写出即可: fs.writeFile(fileName, JSON.stringify(content, null, 4));
否则,您必须弄清楚如何在旧对象中插入新对象,否则可能会使它成为无效的json。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.