Как сохранить массив в csv файл?

308
15 марта 2018, 11:56

Есть такой код он парсит данные с сайта и записывает их в виде массива.

Вопрос : как сохранить массив в csv файл?

const tress = require('tress'); 
const needle = require("needle"); 
const cheerio = require("cheerio"); 
const async = require("async"); 
const fs = require('fs'); 
 
let aUrl = [ 
    'ссылка на товар', 
    'ссылка на товар', 
    'ссылка на товар', 
]; 
 
const jquery = body => cheerio.load(body); 
 
let products = []; 
 
let parsePage = ($) => { 
    let name = $("#shop-production-view > h1").first().text(); 
    let categories = $(".breadcrumb").text(); 
    let price = $(".price").text(); 
    let content = $('.content_item').html(); 
    let images = $(".image").find("img").attr("src"); 
 
    // let $imageLink = $(".shop-production-view .image a"), 
    //     img = ''; 
    // if ($imageLink.length > 0) { 
    //     img = $imageLink.attr("href"); 
    // } 
 
 
    products.push({ 
        name, 
        categories, 
        content, 
        price, 
        images, 
        // img, 
    }); 
}; 
 
let q = tress((url, callback) => { 
    needle.get(url, {  }, (err, res) => { 
        if (err) { 
            throw err; 
        } 
 
        parsePage(jquery(res.body)); 
 
        callback(); 
    }); 
}, 5); 
 
q.drain = () => { 
    console.log(products); 
}; 
 
for (let i = 0; i < aUrl.length; i++) { 
    q.push(aUrl[i]); 
}

Answer 1

Испольузйте соответствующую библиотеку, например fast-csv

Примеры из документации:

var ws = fs.createWriteStream("my.csv");
csv
   .write([
       ["a", "b"],
       ["a1", "b1"],
       ["a2", "b2"]
   ], {headers: true})
   .pipe(ws);

,

csv
   .writeToPath("my.csv", [
       ["a", "b"],
       ["a1", "b1"],
       ["a2", "b2"]
   ], {headers: true})
   .on("finish", function(){
       console.log("done!");
   });

Больше примеров тут.

Answer 2

Готовый пример сохранения JS-массива в csv-файл:

// исходный массив, который хотим увидеть в csv файле 
var data = [ 
  ["name 1", 2, 3], 
  ["name 2", 4, 5], 
  ["name 3", 6, 7], 
  ["name 4", 8, 9], 
  ["name 5", 10, 11] 
]; 
 
// массив строк для csv файла 
var lineArray = []; 
 
// пройти по исходному массиву и подготовить массив строк для csv файла 
data.forEach(function(infoArray) { 
  var line = infoArray.join(","); 
  lineArray.push(line); 
}); 
var csvContent = lineArray.join("\n"); 
 
// имя файла и blob - для создания файла csv 
var filename = 'test.csv'; 
var blob = new Blob([csvContent], { 
  type: 'text/csv;charset=utf-8;' // тип файла 
}); 
 
// сохранить файл на диск 
if (navigator.msSaveBlob) { // для IE 10+ 
  navigator.msSaveBlob(blob, filename); 
} else { // для остальных браузеров 
  var link = document.createElement("a"); 
  if (link.download !== undefined) { 
    var url = URL.createObjectURL(blob); 
    link.setAttribute("href", url); 
    link.setAttribute("download", filename); 
    link.style.visibility = 'hidden'; 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 
  } 
}

Ссылки на источники:

  • How to export JavaScript array info to csv (on client side)?
  • JavaScript array to CSV
READ ALSO
Не возвращает return

Не возвращает return

Не могу понять, почему если через consolelog, то вижу данные, а если через return то ничего не приходит

221
Не могу regex&#39;ом на Javascript&#39;e удалить внутренний style

Не могу regex'ом на Javascript'e удалить внутренний style

При копировании текста с Вордовского документа и последующей вставке в html-элемент с contenteditable="true" получаю внутренний стиль вида:

223
pug &mdash; dynamic inclusion

pug — dynamic inclusion

Всем доброго времени суток!

187