用node.js实现http小爬虫
这次我第一次写博客!
最近我在慕课网上面学习了nodejs的基础教程,参照一些小伙伴的代码,写出了如下http小爬虫。
关于代码的理解:
第一部分:基础模块是http
用http模块中的get方法。
第二部分:需要引入api
通过在命令行中输入npm install cheerio来引入插件。
通过filterChapters(html)来对get方法中得到html信息进行筛选。
然后通过printCouerseInfo(courseData)将数据在控制台中输出。
代码块
var http = require(‘http’);
var cheerio = require(‘cheerio’);
var url = ‘http://www.imooc.com/learn/348‘;
http.get(url, function (res){
var html ='';
res.on('data',function(data){
html+=data;
});
res.on('end',function(){
var courseData=filterChapters(html);
printCouerseInfo(courseData);
})
}).on('error',function(){
console.log('获取课程数据出错');
});
function filterChapters(html){
var $=cheerio.load(html);
var chapter=$('.chapter');
var courseData=[];
chapter.each(function (item){
var chapter=$(this);
var chapterTitle =chapter.find('strong').text();
var videos =chapter.find('.video').children('li');
var chapterData ={
chapterTitle:chapterTitle,
video:[]
};
videos.each(function(item){
var video =$(this).find('.J-media-item');
var videoTitle =video.text();
var id=video.attr('href').split('video/')[1];
chapterData.video.push({
title:videoTitle,
id:id
})
});
courseData.push(chapterData)
});
return courseData;}
courseData.forEach(function(item){
var chapterTitle =item.chapterTitle;
console.log(chapterTitle+"\n");
item.video.forEach(function(video){
console.log('['+video.id+'] '+video.title+'\n');
});
});
}