仿教程 小爬虫抓取imooc数据
Posted LarryZeal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿教程 小爬虫抓取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 = [] 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 = { // 定义一个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 = filterChapters(html) printCourseData(courseData) }) }).on(‘error‘, function () { console.log(‘获取课程数据出错了‘) })
以上是关于仿教程 小爬虫抓取imooc数据的主要内容,如果未能解决你的问题,请参考以下文章