node爬取数据实例:抓取宝可梦图鉴并生成Excel文件

0.前言

宝可梦是我们非常熟悉的一种游戏形式,它起源于日本,是一个手持游戏的系列。不同的宝可梦具有不同的属性和能力值,玩家需要训练它们并进行战斗。现在,我们可以通过node爬虫来获取宝可梦的数据,并将其生成为Excel文件。

1.什么是node爬虫

node爬虫是指使用node.js技术,通过网络协议模拟浏览器的行为,从网络上抓取数据的程序。它是通过http/https请求来获取HTML页面,通过解析页面中的数据来完成信息获取。node爬虫具有快速、强大的特点,并且可以结合多种技术和工具来实现不同的功能。

2.如何使用node爬虫抓取宝可梦数据

2.1 认识网站:https://wiki.52poke.com/zh-hans/

为了抓取宝可梦数据,我们需要先了解宝可梦图鉴的网站。宝可梦图鉴是一个专门介绍各种宝可梦信息的网站,我们可以从网站中获取宝可梦的名称、属性、技能、图像等数据。我们使用的是一个简体中文版本的宝可梦图鉴网站:https://wiki.52poke.com/zh-hans/

2.2 分析页面结构

在我们抓取网站信息之前,我们需要对网站的页面结构进行分析。我们可以使用Chrome的开发者工具来分析宝可梦图鉴的页面结构。点击右键-选择“审查元素”-选择“Elements”选项卡可以查看页面的HTML结构。

//代码片段

<table>

<tbody>

<tr>

<td>1</td>

<td><a href="/zh-hans/妙蛙种子">妙蛙种子</a></td>

<td>草 / 毒</td>

<td>树枝枪 or 種子機關槍</td>

<td>30 / 45 / 40 / 35 / 35 / 70</td>

<td>001</td>

</tr>

<tr>

<td>2</td>

<td><a href="/zh-hans/妙蛙草">妙蛙草</a></td>

<td>草 / 毒</td>

<td>树枝枪 or 種子機關槍</td>

<td>45 / 50 / 55 / 75 / 65 / 30</td>

<td>002</td>

</tr>

<tr>

<td>3</td>

<td><a href="/zh-hans/妙蛙花">妙蛙花</a></td>

<td>草 / 毒</td>

<td>树枝枪 or 種子機關槍</td>

<td>68 / 65 / 70 / 85 / 75 / 40</td>

<td>003</td>

</tr>

<tr>

<td>4</td>

<td><a href="/zh-hans/小火龙">小火龙</a></td>

<td>火</td>

<td>火箭头 or 火焰旋风</td>

<td>39 / 52 / 43 / 60 / 50 / 65</td>

<td>004</td>

</tr>

</tbody>

</table>

我们可以从上面的代码中看到,宝可梦的信息是以一个table/tbody/tr/td的形式存在的,每个td中都包含了宝可梦的不同信息,如它的编号、名称、属性等。因此我们可以通过解析table标签,来获取其中宝可梦的信息。

2.3 使用cheerio库解析HTML页面

为了解析网页,我们可以借助cheerio库。该库可以将HTML字符串转换为DOM树,并提供了类似jQuery的CSS选择器语法来方便地获取DOM元素。

//代码片段

const axios = require('axios');

const cheerio = require('cheerio');

async function getPokemonData() {

const url = 'https://wiki.52poke.com/zh-hans/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%9B%BE%E9%89%B4';

const response = await axios.get(url);

const $ = cheerio.load(response.data);

const tbody = $('table.roundy').find('tbody');

const pokemonData = [];

tbody.children().each((_, element) => {

const Pokemon = {};

const tdData = $(element).children();

Pokemon.id = $(tdData[0]).text().trim(); //获取宝可梦ID

Pokemon.name = $(tdData[1]).text().trim(); //获取宝可梦名称

Pokemon.type = $(tdData[2]).text().trim(); //获取宝可梦属性

Pokemon.skill = $(tdData[3]).text().trim(); //获取宝可梦技能

Pokemon.power = $(tdData[4]).text().trim(); //获取宝可梦体力值

pokemonData.push(Pokemon);

});

return pokemonData;

}

async function main() {

const pokemonData = await getPokemonData();

console.log(pokemonData); //打印宝可梦数据

}

main();

上面的代码中,我们通过使用cheerio库解析HTML页面,然后通过CSS选择器寻找到目标节点。接着,我们遍历每个tr节点,并通过children()方法来获取td节点,最后以对象的形式存储宝可梦数据。

3.将数据生成Excel文件

3.1 安装依赖库

为了将数据生成Excel文件,我们需要安装两个依赖库:node-xlsx和fs。其中node-xlsx是用来操作Excel文件的库,fs则是Node.js自带的文件操作模块。

//代码片段

npm install node-xlsx

npm install fs --save

3.2 生成Excel文件

接下来,我们将使用node-xlsx库来生成Excel文件。我们通过一个函数来传递宝可梦数据,并将宝可梦数据存储到Excel文件中。

//代码片段

const fs = require('fs');

const xlsx = require('node-xlsx');

function writeToExcel(pokemonData) {

const data = [['ID', 'Name', 'Type', 'Skill', 'Power']];

pokemonData.forEach((Pokemon) => {

const row = [Pokemon.id, Pokemon.name, Pokemon.type, Pokemon.skill, Pokemon.power];

data.push(row);

});

const buffer = xlsx.build([{ name: 'Pokemon Data', data }]);

fs.writeFileSync('pokemon_data.xlsx', buffer);

}

async function main() {

const pokemonData = await getPokemonData();

writeToExcel(pokemonData); //将宝可梦数据存储到Excel文件中

}

main();

上面的代码中,我们先使用node-xlsx来构建了一个包含宝可梦数据的二维数组。然后,在使用xlsx.build()方法将数组转换为Excel文件。最后,我们使用fs模块将Excel文件写入磁盘。

4.总结

本文介绍了如何使用node爬虫抓取宝可梦图鉴的数据,并将其生成Excel文件。我们在这个过程中使用了Cheerio库来解析HTML页面,使用node-xlsx库来操作Excel文件。通过这个例子,我们可以学习到如何使用Node.js编写爬虫程序,如何操作HTML页面和Excel文件。希望本文能够帮助大家入门Node.js爬虫编程。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。