node.js - 在 csv 文件中写入数据时遇到问题
问题描述
我编写了一个脚本,用于从网页中获取不同的个人资料和他们的node
个人puppeteer
资料names
。links
脚本以正确的方式获取它们。
我现在想做的是将数据写入 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 文件?
解决方案
有一种更简单的方法可以实现相同的目标。如果您查看这个库,您可以非常轻松地将数据写入 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();
})();
推荐阅读
- json - 基于Spring的rest服务返回html而不是json
- android - 如何使用 okhttp 和内容 URI 在 Android 11 中将文件上传到服务器?(PDF,docx..)
- node.js - 使用比例约束最大化网络流量
- swift - swift中的Karatsuba乘法
- java - 获取斐波那契数的总和的代码
- python - 覆盆子打开 LED 的问题
- macos - 在每个终端行周围添加一个边框(markdown 代码块效果)
- javascript - 当通过wordpress functions.php中的变量给定值时,为什么attachment_url_to_postid返回0
- single-sign-on - 是否要求每个用户都存在于 SSO 上下文中的应用程序(服务提供者)和身份提供者中?
- python - 用不同的单位求和文件大小