曲振飞的个人博客

专注于Web全栈开发、APP设计、网站建设

当前位置 : 主页 > 后端开发 > Node.js使用cheerio制作http小爬虫

Node.js使用cheerio制作http小爬虫

时间:2016-10-13 22:28:13 栏目:后端开发 作者:曲振飞 点击: 326

准备工作:

安装nodejs环境

安装cheerio,cheerio 是一个运行于后台,操作dom节点的插件,可以认为是一个nodejs版的jquery

npm install cheerio

分析dom节点

大家可以看源代码,我们要抓取的数据都是包含在一个一个标签里面,要分析其DOM结构,遵循其中的规律。

blob.png

下面给出实例,可以将以下实例拷出本地直接运行。

var http = require('http'); //加载http模块
var cheerio = require('cheerio'); //加载cheerio模块,在服务器端解析代码
var url = 'http://www.imooc.com/learn/348';
function filterChapter(html){
	var $ = cheerio.load(html);
	var chapters = $('.chapter'); //拿到每一章
	var courseData = [];
	chapters.each(function(item){ //对每一章进行遍历
		var chapter = $(this); //获取每一张对象
		var chapterTitle = chapter.find('strong').text();  //章节标题
		var videos = chapter.find('.video').children('li');

		var chapterData = {  //存储每一张的信息
			chapterTitle:chapterTitle,
			videos:[]
		}
		videos.each(function(item){
			var video = $(this).find('.J-media-item'); //先获取这个a标签
			var videoTitle = video.text();	//视频标题
			var id = video.attr('href').split('video/')[1]; //id
			chapterData.videos.push({
				title:videoTitle,
				id:id
			});
		}); //遍历这个标题数组
		courseData.push(chapterData); //将每一章的信息 push进去
	}); 
	return courseData;
}
function printCourseInfo(courseData){
	courseData.forEach(function(item){
		var chapterTitle = item.chapterTitle;
		console.log(chapterTitle + '\n');
		item.videos.forEach(function(video){
			console.log('  【'+video.id+'】  '+ video.title + '\n');
		});
	});
}
http.get(url,function(res){
	var html = "";
	//下面这个data事件不断的被触发,这个html数据片段就会不断的累加
	res.on('data',function(data){ 
		html += data;
	});
	res.on('end',function(){ //在end事件里面,我们会把数据给打印出来
		var courseData = filterChapter(html);  //将html的内容过滤
		printCourseInfo(courseData);
	});
}).on('error',function(){ //注册一个
	console.log('获取课程数据出错!');
});


关键字: 爬虫

关于站长

曲振飞,一个热忠、从事于互联网的90后青年.专注于网站建站、网站设计及优化.以用户体验、WEB标准为主旨,将网站的整体设计与网页设计的相关原理紧密结合.