繁体   English   中英

使用NodeJS将网页抓取的数据写入JSON文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM