Node.js:当文件太大时,fs writestream停止写入文件

时间:2017-01-05 12:56:01

标签: javascript node.js web-scraping screen-scraping

我正在抓取一个包含大量数据的网页,格式化为HTML表格。您必须提交表单才能生成表格。我的节点脚本提交表单的所有排列,每次擦除结果表,将每行转换为一行数据。

问题是,当我将数据写入某个文件时,当文件大小达到10MB时,它就会停止工作。有时它会少一些;有时多一点。我尝试将文件写为.csv,.json和.txt,并且每次出现同样的问题时。

我正在使用fs来执行此任务。相关代码是:

var fs = require("fs");
var stream = fs.createWriteStream("data.csv"); // can also be .json or .txt

stream.write(line_of_data);

我可以console.log(line_of_data)并且它可以正常工作,直到没有数据留下来。但是大约10MB,输出文件将不再接受任何数据行。停止点似乎几乎完全是任意的 - 每次我运行脚本时,它都会停止在不同的点写入。我的硬盘上有很多存储空间,所以问题必须与其他东西有关。

1 个答案:

答案 0 :(得分:0)

我最终使用MongoDB来存储数据。要将MongoDB安装为节点模块,请运行npm install mongodb --save。相关的javascript是:

MongoClient = require("mongodb").MongoClient;
MongoClient.connect("mongodb://localhost:27017/database", function(err, db) {

  if (!err) {

    // set up mongodb collection
    db.createCollection("collection", function(err, collection) {}); 
    var collection = db.collection("collection");

    // after scraping data... 
    // insert a data object (line_of_code)
    collection.insert(line_of_data, {w: 1}, function(err, result) {
      if (err) console.log(err);
    });

  }

});

转换数据的一些命令:

  1. 导出为CSV:mongoexport --db database --collection collection --out data.csv --type=csv --fields 'field1, field2, field3, etc.'
  2. 转换为JSON:csvtojson data.csv > data.json(需要csvtojson
  3. 验证JSON:jsonlint data.json(需要jsonlint