node小爬虫案例
1.依赖
- 本案例需要使用nodejs原生库中的https模块,以及npm库中的cheerio模块,请提前了解其用法,和对外部模块进行下载安装
npm install cheerio --save
2.详细代码
- 本案例仅供学习,切勿将其滥用。
- 具体讲解写在注释中
/*
第一步观察要爬取的网站,采用的是htpp协议还是https协议,两个模块用法相同,这里以https模块为例
*/
const https = require('https');
const cheerio = require('cheerio');
const targetUrl = 'https://www.bilibili.com/v/popular/rank/all'
/*
模块引入之后使用https中的get方法,发送请求,
https.get(url,回调方法)
通过回调方法获得请求响应的实例对象
*/
https.get(targetUrl,function(res){
var html = "";
res.on('data',function(data){
// console.log(data);
html += data
//简写方式 相当于 html = html + data
})
/*
给实例绑定data事件,执行data事件,获取buffer类型的数据
*/
res.on('end',function(){
// console.log(html);
/*
对数据进行拼接,再响应执行完后,获取带有html标签的数据
然后执行getRankingList(html),将获取到的html传入
*/
getRankingList(html)
})
res.on('error',function(error){
console.log(error);
})
})
function getRankingList(html){
/*
使用cheerio模块下的load方法对html进行初始处理,
随后就可以使用jquery方法,获取节点
*/
var $ = cheerio.load(html);
var rankContent = $(".rank-item");
//对包含数据的节点进行获取,然后进行遍历取值,最终转成数组进行输出
var rankList=[];
rankContent.each((index,value)=>{
var rankName = $(value).find('.info>a').text();
rankList.push({rankName})
//简写方式 = rankList.push({rankName:rankName})
})
console.log(rankList);
}
关注微信公众号前端凌影,一起学习吧!