返回
数据抓取与转化:从宝可梦图鉴到Excel接口的自动化流程
后端
2024-02-02 12:00:32
如今,数据无处不在,但如何将这些数据转化为有价值的信息,却成为了一项挑战。本文将以宝可梦图鉴为例,演示如何使用 Node.js 自动化从网页上抓取数据,并将这些数据导出到 Excel 文件中,最后,我们将创建一个 API 接口来读取 Excel 中的数据,实现数据的自动化访问。
一、数据抓取
首先,我们需要使用 Node.js 来抓取宝可梦图鉴的数据。这里我们将使用 Puppeteer 库,它是一个无头浏览器,可以用来模拟浏览器操作,抓取网页数据。
const puppeteer = require('puppeteer');
(async () => {
// 启动 Puppeteer
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 访问宝可梦图鉴网站
await page.goto('https://www.pokemon.com/us/pokedex/');
// 抓取宝可梦名称和属性数据
const pokemonNames = await page.$eval('.pokemon-name', elements => elements.map(element => element.textContent));
const pokemonTypes = await page.$eval('.pokemon-type', elements => elements.map(element => element.textContent));
// 将数据存储在 JSON 文件中
const data = JSON.stringify({ pokemonNames, pokemonTypes });
fs.writeFile('pokemon-data.json', data, (err) => {
if (err) {
console.error(err);
return;
}
console.log('数据抓取成功');
});
// 关闭浏览器
await browser.close();
})();
二、数据导出
接下来,我们将使用 Node.js 的 exceljs 库来将 JSON 数据导出到 Excel 文件中。
const exceljs = require('exceljs');
// 读取 JSON 数据
const data = JSON.parse(fs.readFileSync('pokemon-data.json', 'utf-8'));
// 创建工作簿
const workbook = new exceljs.Workbook();
const worksheet = workbook.addWorksheet('宝可梦图鉴');
// 设置工作表标题
worksheet.columns = [
{ header: '名称', key: 'name' },
{ header: '属性', key: 'type' }
];
// 填充工作表数据
data.pokemonNames.forEach((name, index) => {
worksheet.addRow({ name, type: data.pokemonTypes[index] });
});
// 保存工作簿
workbook.xlsx.writeFile('pokemon-data.xlsx').then(() => {
console.log('数据导出成功');
});
三、API 接口
最后,我们将使用 Node.js 的 Express 库来创建一个 API 接口,以便我们可以读取 Excel 文件中的数据。
const express = require('express');
const exceljs = require('exceljs');
const app = express();
// 获取宝可梦数据
app.get('/api/pokemon', (req, res) => {
// 读取 Excel 文件
const workbook = new exceljs.Workbook();
workbook.xlsx.readFile('pokemon-data.xlsx').then(() => {
// 获取工作表数据
const worksheet = workbook.getWorksheet('宝可梦图鉴');
const data = worksheet.getRows().map(row => {
return {
name: row.getCell('A').value,
type: row.getCell('B').value
};
});
// 返回数据
res.json(data);
});
});
// 启动服务器
app.listen(3000, () => {
console.log('服务器已启动');
});
现在,我们就可以通过浏览器访问 http://localhost:3000/api/pokemon
来获取宝可梦图鉴的数据了。
总结
本文演示了如何使用 Node.js 自动化从网页上抓取数据,并将这些数据导出到 Excel 文件中,最后,我们创建了一个 API 接口来读取 Excel 中的数据,实现数据的自动化访问。这种自动化流程可以应用于各种数据抓取和处理场景,帮助我们更高效地管理和利用数据。