0

0

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

青灯夜游

青灯夜游

发布时间:2022-08-26 20:31:23

|

2943人浏览过

|

来源于掘金社区

转载

怎么用node爬取网页的数据并写入excel文件?下面本篇文章通过一个实例来讲解一下用node.js爬取网页的数据并生成excel文件的方法,希望对大家有所帮助!

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

相信宝可梦是很多90后的童年回忆,身为程序员不止一次的也想做一款宝可梦游戏,但是做之前应该先要整理一下有多少宝可梦,他们的编号,名字,属性等信息整理出来,本期将用 Node.js 简单的实现一个从宝可梦网页数据的爬取,到把这些数据生成Excel文件,直至做接口读取Excel访问到这些数据。

爬取数据

既然是爬取数据,那我们先找一个有宝可梦图鉴数据的网页,如下图:

示例图0.png

这个网站是用PHP写的,前后没有做分离,所以我们不会读接口来捕获数据,我们使用 crawler 库,来捕获网页中的元素从而得到数据。提前说明一下,用 crawler 库,好处是你可以用 jQuery 的方式在Node环境中捕获元素。

安装:

ChartGen
ChartGen

AI快速生成专业数据图表

下载
yarn add crawler

实现:

const Crawler = require("crawler");
const fs = require("fs")
const { resolve } = require("path")

let crawler = new Crawler({
    timeout: 10000,
    jQuery: true,
});

let crawler = new Crawler({
    timeout: 10000,
    jQuery: true,
});

function getPokemon() {
    let uri = "" // 宝可梦图鉴地址
    let data = []
    return new Promise((resolve, reject) => {
        crawler.queue({
            uri,
            callback: (err, res, done) => {
                if (err) reject(err);
                let $ = res.$;
                try {
                    let $tr = $(".roundy.eplist tr");
                    $tr.each((i, el) => {
                        let $td = $(el).find("td");
                        let _code = $td.eq(1).text().split("\n")[0]
                        let _name = $td.eq(3).text().split("\n")[0]
                        let _attr = $td.eq(4).text().split("\n")[0]
                        let _other = $td.eq(5).text().split("\n")[0]
                        _attr = _other.indexOf("属性") != -1 ? _attr : `${_attr}+${_other}`
                        if (_code) {
                            data.push([_code, _name, _attr])
                        }
                    })
                    done();
                    resolve(data)
                } catch (err) {
                    done()
                    reject(err)
                }

            }
        })
    })
}

在生成实例的时候,还需要开启 jQuery 模式,然后,就可以使用 $ 符了。而以上代码的中间部分的业务就是在捕获元素爬取网页中所需要的数据,使用起来和 jQuery API 一样,这里就不再赘述了 。

getPokemon().then(async data => {
    console.log(data)
})

最后我们可以执行并打印一下传过来的 data 数据,来验证确实爬取到了格式也没有错误。

示例图1.png

写入Excel

既然刚才已经爬取到数据了,接下来,我们就将使用 node-xlsx 库,来完成把数据写入并生成一个 Excel 文件中。

首先,我们先介绍一下,node-xlsx 是一个简单的 excel 文件解析器和生成器。由 TS 构建的一个依靠 SheetJS xlsx 模块来解析/构建 excel 工作表,所以,在一些参数配置上,两者可以通用。

安装:

yarn add node-xlsx

实现:

const xlsx = require("node-xlsx")

getPokemon().then(async data => {
    let title = ["编号", "宝可梦", "属性"]
    let list = [{
        name: "关都",
        data: [
            title,
            ...data
        ]
    }];
    const sheetOptions = { '!cols': [{ wch: 15 }, { wch: 20 }, { wch: 20 }] };
    const buffer = await xlsx.build(list, { sheetOptions })
    try {
        await fs.writeFileSync(resolve(__dirname, "data/pokemon.xlsx"), buffer, "utf8")
    } catch (error) { }
})

name 则是Excel文件中的栏目名,而其中的 data 类型是数组其也要传入一个数组,构成二维数组,其表示从 ABCDE.... 列中开始排序传入文本。同时,可以通过!cols来设置列宽。第一个对象wch:10  则表示 第一列宽度为10 个字符,还有很多参数可以设置,可以参照 xlsx 库 来学习这些配置项。

最后,我们通过 xlsx.build 方法来生成 buffer 数据,最后用 fs.writeFileSync 写入或创建一个 Excel 文件中,为了方便查看,我这里存入了 名叫 data 的文件夹里,此时,我们在 data 文件夹 就会发现多出一个叫 pokemon.xlsx 的文件,打开它,数据还是那些,这样把数据写入到Excel的这步操作就完成了。

示例图2.png

读取Excel

读取Excel其实非常容易甚至不用写  fs 的读取, 用xlsx.parse 方法传入文件地址就能直接读取到。

xlsx.parse(resolve(__dirname, "data/pokemon.xlsx"));

当然,我们为了验证准确无误,直接写一个接口,看看能不能访问到数据。为了方便我直接用 express 框架来完成这件事。

先来安装一下:

yarn add express

然后,再创建  express 服务,我这里端口号就用3000了,就写一个 GET 请求把读取Excel文件的数据发送出去就好。

const express = require("express")
const app = express();
const listenPort = 3000;

app.get("/pokemon",(req,res)=>{
    let data = xlsx.parse(resolve(__dirname, "data/pokemon.xlsx"));
    res.send(data)
})

app.listen(listenPort, () => {
    console.log(`Server running at http://localhost:${listenPort}/`)
})

最后,我这里用 postman 访问接口,就可以清楚的看到,我们从爬取到存入表格所有的宝可梦数据都接收到了。

示例图3.png

结语

如你所见,本文以宝可梦为例,来去学习怎么用Node.js爬取网页的数据,怎么把数据写入Excel文件,以及怎么读取到Excel文件的数据这三个问题,其实实现难度并不大,但有些时候蛮实用的,如果担心忘记可以收藏起来哟~

更多node相关知识,请访问:nodejs 教程

相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2539

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1606

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1500

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1416

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
快速入门Node.JS全套完整版
快速入门Node.JS全套完整版

共83课时 | 8.3万人学习

nodejs开发基础教程
nodejs开发基础教程

共15课时 | 4.5万人学习

JavaScript设计模式视频教程
JavaScript设计模式视频教程

共28课时 | 5.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号