首页 > 代码库 > 仿教程 小爬虫抓取imooc数据
仿教程 小爬虫抓取imooc数据
慕课网的nodejs教程:http://www.imooc.com/learn/348
这人讲的很赞,特别是在事件驱动这点上,耳目一新。
视频略老,所以demo有些过时了,摸索着写了一个自己的小程序。
比较痛苦的是最近半年几乎没写过jQuery,不少用法实在想不起来,好在翻着API也不是什么问题。
首先,npm install cheerio,可以认为cheerio这货就是nodejs版本的jQuery,用法应该完全一致。
然后就可以愉快的敲代码了:
var http = require(‘http‘) var cheerio = require(‘cheerio‘) var url = ‘http://www.imooc.com/learn/348‘ function filterChapters(html) { var $ = cheerio.load(html) var chapters = $(‘div.chapter‘) var courseData =http://www.mamicode.com/ [] chapters.each(function () { var chapter=$(this) // $(this)的用法可以让回调方法省略参数 // var chapterTitle = chapter.find(‘strong‘).text().trim() var chapterTitle = chapter.find(‘strong‘).contents().filter(function() { return this.nodeType === 3; }).text().trim(); var videos=chapter.find(‘ul‘).children()
var chapterData =http://www.mamicode.com/ { // 定义一个json以接收数据 chapterTitle : chapterTitle, videos:[] } videos.each(function () { var video=$(this).find(‘a‘) var temp=video.text().trim() // var temp=video.contents().filter(function() { return this.nodeType === 3; }).text().trim(); var arr = temp.split(‘\n‘) // 多层标签的文本都拼到一起了,要拆开,取用需要的值 var videoTitle = arr[0].trim() + ‘ ‘ +arr[1].trim() var id=video.attr(‘href‘).split(‘video/‘)[1].trim() chapterData.videos.push({ // 填写数据 title : videoTitle, id : id }) }) courseData.push(chapterData) }) return courseData }
// 输出函数
function printCourseData(courseData) { courseData.forEach(function (item) { var chapterTitle = item.chapterTitle console.log(chapterTitle ) item.videos.forEach(function (video) { console.log(‘---【‘+video.id + ‘】 ‘ + video.title.trim() ) }) }) } // 拿到源码,调用方法进行解析及输出 http.get(url, function(res){ var html = ‘‘ res.on(‘data‘, function (data) { html+=data }) res.on(‘end‘,function(){ var courseData =http://www.mamicode.com/ filterChapters(html) printCourseData(courseData) }) }).on(‘error‘, function () { console.log(‘获取课程数据出错了‘) })
仿教程 小爬虫抓取imooc数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。