返回

数据抓取与转化:从宝可梦图鉴到Excel接口的自动化流程

后端

如今,数据无处不在,但如何将这些数据转化为有价值的信息,却成为了一项挑战。本文将以宝可梦图鉴为例,演示如何使用 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 中的数据,实现数据的自动化访问。这种自动化流程可以应用于各种数据抓取和处理场景,帮助我们更高效地管理和利用数据。