为了账号安全,请及时绑定邮箱和手机立即绑定

本章节源码,并附有部分注解,希望可以帮助到有需要的同学

//爬取imooc单章内容,并整理筛选打印

var http = require('http')

var cheerio = require('cheerio')

var url = 'http://www.imooc.com/learn/348'


//把html作为参数传递给一个函数,让函数对数据做相应的过滤

function filterChapters(html){

//装载html

var $ = cheerio.load(html)

//charpts拿到每章的标题

var chapters = $('.chapter')

//数据结构

// var chapters = $('.chapter')


// [{

// chapterTitle :

// videos:[

// videoTitle:'',

// videoId:''

// ]

// }]


var courseData = []

chapters.each(function(item){

var chapter = $(this)

var chapterTitle = chapter.find('h3').text().trim()

var videos = chapter.find('.video').children('li')

var chapterData = {

chapterTitle: chapterTitle,

videos :[]

}

videos.each(function(liList){

var video = $(this).find('.J-media-item')

var videoTitle = video.text().trim()

var videoId = video.attr('href').split('video/')[1]

chapterData.videos.push({

videoTitle: videoTitle,

videoId: videoId

})

})

courseData.push(chapterData)

})

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.videoId +']' + video.videoTitle + '\n')

})

})

}


http.get(url,function(res){

var html = ''

res.on('data',function(data){

html += data

})

res.on('end',function(){

var courseData = filterChapters(html)

printCourseInfo(courseData)

}).on('error',function(e){

console.error('extrat 348 chapter action is failed')

})

})


正在回答

2 回答

单纯用trim方法,输出还是很丑

0 回复 有任何疑惑可以回复我~

非常不错,而且看的出来楼主也是看懂了的,我当时结果出不来,发现慕课网的div class是改了的,也是醉了,哈哈。改了后就出来了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
进击Node.js基础(一)
  • 参与学习       219397    人
  • 解答问题       896    个

本视频教程带你揭开Node.js的面纱,带你走进一个全新世界

进入课程

本章节源码,并附有部分注解,希望可以帮助到有需要的同学

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信