Форматировать вывод Puppeteer для экспорта в CSV

Я написал сценарий Puppeteer, который очищает текст с веб-сайта (это графический интерфейс, который отображает файлы журнала сервера — это сайт Squarespace, поэтому я могу получить доступ к файлам журнала только так).

Вот как строки отображаются в графическом интерфейсе: введите здесь описание изображения

Скрипт читает это (и каждую строку ниже) и выводит в console.log() в данный момент.

Эта запись выше выводит так:

11/9/2018 at 12:21:44pm70.119.157.106AboutHostname:70.119.157.106Location:Carrollton, Texas, United StatesTags:-Referrer:www.website.com/Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36

И они размещаются в выводе встык в гигантском блоке, подобном этому:

11/9/2018 at 12:21:44pm70.119.157.106AboutHostname:70.119.157.106Location:Carrollton, Texas, United StatesTags:-Referrer:www.website.com/Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.3611/9/2018 at 12:21:33pm70.119.157.106HomesitesHostname:70.119.157.106Location:Carrollton, Texas, United StatesTags:-Referrer:www.website.com/about/Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.3611/9/2018 at 12:21:26pm70.119.157.106AboutHostname:70.119.157.106Location:Carrollton, Texas, United StatesTags:-Referrer:www.website.com/Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.3611/9/2018 at 12:21:15pm70.119.157.106HomeHostname:70.119.157.106Location:Carrollton, Texas, United StatesTags:-Referrer:-Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36

Сейчас я нахожусь на этапе, когда пытаюсь понять, как записать это в CSV, а не в терминал с помощью console.log(textContent);.

Как лучше всего записать это в CSV?

(Следующим шагом будет разбор всего этого, но... детские шаги...)


person reallymemorable    schedule 09.11.2018    source источник
comment
Вы хотите сохранить CSV-файл локально или запускаете код из облака? бывший. код запускается из лямбды, и вам нужно сохранить csv в s3. Если вам нужно что-то локально, вы можете создать CSV-файл и записать в него свои данные: stackoverflow.com/questions/24915609/   -  person Persistent Plants    schedule 10.11.2018


Ответы (1)


Вы можете использовать такой модуль, как csv-stringify, который преобразует массив массивов в csv.

var stringify = require('csv-stringify');

var input = [] 
var line = logLine.split(",");
input.push(line);

stringify(input, function(err, output){
  fs.writeFile("output.csv", output);
});

Рекомендуется использовать модуль, потому что он обрабатывает специальные сценарии, когда в ваших полях csv могут быть такие символы, как , или ".

Однако вы могли бы жить и без модуля, CSV — это очень простой формат (за исключением этих особых случаев), поэтому, если бы вы могли просто соединить все свои значения с помощью , и использовать fs.writeFile или fs.appendFile, чтобы записать их в вывод.

person mihai    schedule 10.11.2018
comment
Но поступающие данные (как в приведенном мной примере) не являются массивом. Вы предполагаете, что csv-stringify обнаружит, где нужно разделить данные? - person reallymemorable; 12.11.2018
comment
нет, вы должны сами выполнить синтаксический анализ и решить, что входит в массив. В своем коде я показал базовый пример разбиения по запятой, но вам нужно решить, что оставить, а что выбросить из лога - person mihai; 12.11.2018