利用node爬取王者荣耀英雄信息,并存入数据库

抓取

一、新建一个文件夹

文件夹不要是中文

二、下载第三方模块

  1. cmd进入文件夹地址,输入:npm init -y进行初始化
  2. 输入npm i crawler mysql-ithm下载爬虫和node-orm模板

三、导入模块

const Crawler = require("crawler");
const db = require('mysql-ithm')

四、利用爬虫模块进行抓取数据

  1. 在王者荣耀官网找到请求,所有英雄的ajax请求

在这里插入图片描述

  1. 其中他的响应就是所有英雄的信息(但是不是详细信息)

在这里插入图片描述

  1. 通过ename属性获取对应英雄的详细信息

比如:猪八戒的ename为:551

其英雄详细地址:

在这里插入图片描述

  1. 通过第三方模块crawler来获取所有的英雄详细信息
  • 先通过请求herolist接口获取所有ename属性,循环访问所有的英雄详细信息页面,并为爬取详细信息页获取链接
  • 在把请求到的数据写到一个数组中,以便做orm插入
var heros = []
var c = new Crawler({
    maxConnections: 10,
    // This will be called for each crawled page
    callback: function (error, res, done) {
        if (error) {
            console.log(error);
        } else {
            var $ = res.$;
			//1.先通过请求herolist接口获取所有ename属性,循环访问所有的英雄详细信息页面
            JSON.parse(res.body).forEach(element => {
                // Queue just one URL, with default callback
                let url = `https://pvp.qq.com/web201605/herodetail/${element.ename}.shtml`
                //为下个请求建立连接
                xq.queue(url);
            });
        }
        done();
    }
});

// Queue just one URL, with default callback
c.queue('https://pvp.qq.com/web201605/js/herolist.json');

var xq = new Crawler({
    maxConnections: 10,
    // This will be called for each crawled page
    callback: function (error, res, done) {
        if (error) {
            console.log(error);
        } else {
            var $ = res.$;
           	//写入一个数组中
            heros.push({
                heroName: $('.cover-name').text(),
                heroSkill: $('.skill-name>b').first().text(),
                heroIcon: 'http:' + $('.ico-play').prev().attr('src')
            })
        }
        done();
    }
});

入库

一、通过第三方orm插件建立连接,并创建表

const db = require('mysql-ithm')
db.connect({
    host: 'localhost',//数据库地址
    port: '3306',
    user: 'root',//用户名,没有可不填
    password: 'root',//密码,没有可不填
    database: 'vido'//数据库名称
});
let heroModel = db.model('hero', {
    heroName: String,
    heroSkill: String,
    heroIcon: String,
    isDelete: String
});

二、用刚才存储数据的数组,写入到数据库中

  • 但是这里有个问题要注意一下:

爬虫爬取数据是异步操作,我们必须要等到所有数据爬取完了,才写入数据库

这里我们通过绑定drain等所有的数据都爬取完了才执行入库操作

//要等待所有的请求全部做完之后,才入库
xq.on('drain', function () {
    heroModel.insert(heros, (err, result) => {
        if (err == null) {
            console.log('添加成功')
        } else {
            console.log('添加失败')
        }
    })
});

三、数据查看

通过上面一系列的操作我们就可以得到你想要的王者荣耀所有英雄的信息了

在这里插入图片描述

源码参考

https://gitee.com/zhao_jia_le/test/tree/master/

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值