我用node
在puppeteer
写了一个脚本,从网页上获取不同的names
和links
到他们的个人资料。脚本以正确的方式获取它们。
我现在要做的是将数据写入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文件中写入数据?
有一种更容易实现相同的方法。如果你查看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();
})();
我没有和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