node js 小爬虫
2016-04-11 22:59
375 查看
node js 小爬虫
var http = require('http');var cheerio = require('cheerio');var url = "http://www.imooc.com/learn/348";var baseurl= "http://www.imooc.com/learn/";var vediosId=[637,348,259,197,134,75];var Promise=require('bluebird')function filterChapters(html) {var $ = cheerio.load(html);var chapters = $('.chapter');var title = $('.course-infos .path span').text();var number = parseInt($($('.meta-value strong')[3]).text().trim(), 10);var courseData ={couseTitle:title,number:number,videos:[]};var chapter;var chapterTitle;var videos;var chapterData;var video;var videoTitle;var id;var adres4000s;chapters.each(function(index, item) {chapter = $(item);chapterTitle = chapter.find('strong').text();videos = chapter.find('li');chapterData = {'chapterTitle': chapterTitle,'videos': []};videos.each(function(index, item) {video = $(item).find('.J-media-item');videoTitle = video.text();id = video.attr('href').split('video/')[1];adress = video.attr('href');chapterData.videos.push({'title':videoTitle,'id':id,'adress':adress});});courseData.videos.push(chapterData);});return courseData;}function printCourseInfo(coursesData) {var chapterTitle;var urlPre = 'URL:http://www.imooc.com';coursesData.forEach(function(courseData) {chapterTitle = courseData.couseTitle;console.log('@@'+chapterTitle + ':' + courseData.number+'人学过!'+ '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n');courseData.videos.forEach(function(item){console.log('###'+item.chapterTitle);item.videos.forEach(function(t){console.log(' '+t.title+' '+ t.id+' '+ t.adress+'\n');})})});}function getPageasync(url){return new Promise(function(resolve,reject){console.log(url);http.get(url, function(res) {var html = '';res.on('data', function(data) {html += data;});res.on('end', function() {resolve(html);});}).on('error', function(e) {reject(e);console.log("失败");});})}var fecthCourseArray=[];vediosId.forEach(function(id){fecthCourseArray.push(getPageasync(baseurl+id))});Promise.all(fecthCourseArray).then(function(pages){var cousesData=[];pages.forEach(function(html){var couseData=filterChapters(html);cousesData.push(couseData)});cousesData.sort(function(a,b){return a.number< b.number});printCourseInfo(cousesData)});
相关文章推荐
- 使用ruby部署工具mina快速部署nodejs应用教程
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行
- nodejs中的fiber(纤程)库详解
- 基于NodeJS的前后端分离的思考与实践(五)多终端适配
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- 实例详解Nodejs 保存 payload 发送过来的文件
- 我的NodeJs学习小结(一)
- Node.js 应用跑得更快 10 个技巧
- nodejs中实现sleep功能实例
- Nodejs异步回调的优雅处理方法
- Windows系统下使用Sublime搭建nodejs环境
- nodejs实现获取某宝商品分类
- nodejs简单实现中英文翻译
- Node.js插件的正确编写方式
- 使用upstart把nodejs应用封装为系统服务实例
- NodeJS Web应用监听sock文件实例
- Nodejs学习笔记之测试驱动
- Nodejs学习笔记之Stream模块