无法在csv文件中写入数据

时间:2019-04-10 08:33:55

标签: node.js web-scraping puppeteer

我已经在node中编写了一个脚本,使用puppeteer从网页中提取了不同的nameslinks到他们的个人资料。该脚本以正确的方式获取它们。

我现在想做的是将数据写到一个csv文件中,但是找不到任何方法。我遇到过许多描述相同内容的示例,但是其中大多数都不完整或正在使用不再维护的此类库。

这是我到目前为止写的:

const puppeteer = require('puppeteer');
const link = "https://www.ak-brandenburg.de/bauherren/architekten_architektinnen";

(async ()=> {
  const browser = await puppeteer.launch()
  const [page] = await browser.pages()
  await page.goto(link)

  const listItem = await page.evaluate(() =>
    [...document.querySelectorAll('.views-table tr')].map(item => ({
      name: item.querySelector('.views-field-title a').innerText.trim(),
      profilelink: "https://www.ak-brandenburg.de" + item.querySelector('.views-field-title a').getAttribute("href"),
    }))
  );
  console.log(listItem);

  await browser.close();
})();

如何将数据写入csv文件?

2 个答案:

答案 0 :(得分:1)

有一种更简单的方法可以实现相同目的。如果您检出this library,则可以非常轻松地将数据写入csv文件。

工作脚本:

const fs = require('fs');
const Json2csv = require('json2csv').Parser;
const puppeteer = require('puppeteer');
const link = "https://www.ak-brandenburg.de/bauherren/architekten_architektinnen";

(async ()=> {
  const browser = await puppeteer.launch()
  const [page] = await browser.pages()
  await page.goto(link)

  const listItem = await page.evaluate(() =>
    [...document.querySelectorAll('.views-table tbody tr')].map(item => ({
      name: item.querySelector('.views-field-title a').innerText.trim(),
      profilelink: "https://www.ak-brandenburg.de" + item.querySelector('.views-field-title a').getAttribute("href"),
    }))
  );
  const j2csv = new Json2csv(['name','profilelink']);
  const csv = j2csv.parse(listItem);
  fs.writeFileSync('./output.csv',csv,'utf-8')

  await browser.close();
})();

答案 1 :(得分:-1)

我没有使用puppeteer,但是我在节点项目中创建了csv文件

将数据存储在数组中,例如:csvData

然后使用fs.writeFile保存您的csv数据。

`fs.writeFile(`path/to/csv/${csvName}.csv`, csvData, 'utf8', function(err) {
 if (err) {
    console.log('error', err)
  }
  res.send({
    url: `path/to/csv/${csvName}.csv`
  })
})`
  

仅当您要将CSV文件从服务器发送到客户端时才使用res.send