首页 > 解决方案 > 在 csv 文件中写入数据时遇到问题

问题描述

我编写了一个脚本,用于从网页中获取不同的个人资料和他们的node个人puppeteer资料nameslinks脚本以正确的方式获取它们。

我现在想做的是将数据写入 csv 文件,但不知道该怎么做。我遇到过许多关于编写相同内容的 tuts,但其中大多数要么不完整,要么使用不再维护的此类库。

这是我到目前为止所写的:

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 文件?

标签: node.jsweb-scrapingpuppeteer

解决方案


有一种更简单的方法可以实现相同的目标。如果您查看这个库,您可以非常轻松地将数据写入 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();
})();

推荐阅读