2017-01-05 77 views
0

我正在抓取包含大量數據的網頁,格式爲HTML表格。您必須提交表單才能生成表格。我的節點腳本提交了表單的所有排列,並且每次都會擦除結果表,將每行都變成一行數據。Node.js:fs writestream在文件變得太大時停止寫入文件

問題是,當我將數據寫入某個文件時,當文件大小約爲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時,輸出文件將不再接受更多的數據行。停止點似乎幾乎完全是任意的 - 每次運行腳本時,它都會停止寫入另一個點。我的硬盤上有充足的存儲空間,所以問題必須與其他方面有關。

+0

你可以在不同的文件中存儲不同的結果表,並最終將它們與nodeJS以外的東西合併在一起嗎? – atayenel

+0

看到這個答案http://stackoverflow.com/questions/9486683/writing-large-files-with-node-js –

回答

0

我最終使用MongoDB來存儲數據。要將MongoDB作爲節點模塊安裝,請運行npm install mongodb --save。相應的JavaScript是:

  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:

    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); 
        }); 
    
        } 
    
    }); 
    

    一些命令來轉換數據jsonlint data.json(要求jsonlint