前提
首先你要学会用dom节点爬数据,如果你不明白请看接下来的代码,请赶紧学会。
(一)、我们拿王者荣耀的例子来看
(2)、打开按键盘的F12打开控制台,先查看是否有jquery函数库
//pack.json
"dependencies": {
"cheerio": "^1.0.0-rc.10",
"iconv-lite": "^0.6.3",
"koa": "^2.13.4",
"koa-body": "^4.2.0",
"koa-router": "^10.1.1",
"koa-static": "^5.0.0",
"mongodb": "^4.3.0",
"mysql": "^2.18.1"
}
这样说明该网站拥有jquery函数库。如果没有的请先动态插入一个script标签然后设置他的属性’src’导入jquery函数库.
(3)、找到金蝉对应元素,然后确定目标后,开始如下操作。
以上就是我们通过操作dom来获取网页中的元素。
主体
ok,完成了上部分的操作同时看了我前两部分的博客的同学,现在已经有一定的基础来进行通过nodejs爬数据了。
思路
1.首先发送数据和接收服务器上的数据,其主要核心技术:ajax
2.拿到数据后,连接数据库的模块:mongodb
3.连接数据库后,将数据存入数据库中。
代码,如下:
//引入模块
var https = require('https')
var fs = require('fs');
var iconv = require('iconv-lite')
var cheerio = require('cheerio');
//连接数据库的模块
var mongodb = require('mongodb');
var client = new mongodb.MongoClient('mongodb://localhost:27017');
var url = "https://pvp.qq.com/web201605/herolist.shtml"
var cc = [];
https.get(url, function (res) {
var chunks = []
if (res.statusCode == 200) {
res.on("data", function (chunk) {
chunks.push(chunk);
})
res.on("end",async () => {
//将获取的代码整合在一起
var str = Buffer.concat(chunks);
//处理乱码
var data = iconv.decode(str, 'gbk');
var $ = cheerio.load(data);
var text = $('ul.herolist a')
var arr = [];
//获取每个英雄的个人页面,和名字
for (var i = 0; i < text.length; i++) {
arr.push({
herf: "https://pvp.qq.com/web201605/" + $(text[i]).attr("href"),
name: $(text[i]).text()
})
}
//连接数据库并添加
client.connect(err=>{
if(err){
console.error(err);
}else{ client.db('data').collection('list').insertMany(arr).then(res=>{
console.log(res);
client.close();
})
}
})
})
}
res.on('error', err => {
console.error(err);
})
})
上面就是我们的nodejs爬数据的核心代码。