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

小小代码,有点意思哈

var http = require('http')

var cheerio = require('cheerio')

var Promise = require('bluebird')

var baseUrl = 'http://www.imooc.com/learn/'

var videoIds = [348,259,197,134,75]


function filterChapters(html) {

var $ = cheerio.load(html)

var chapters = $('.chapter')

var title = $('.course-infos .path span').text()

// var num =  parseInt($($('.meta-value strong')[3]).text().trim(), 10)

     var num = 0

// coursesData = {

// title: title,

// number: number,

// videos: [{

// chapterTitle : '',

// videos : [

//     title: '',

//     id: ''

// ]

// }]

// }


    var courseData = {

    video: [],

    num: num,

    title: title

    }

    

    chapters.each(function(item){

    var chapter = $(this)

    var chapterTitle = chapter.find('strong').text()

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

    var chapterData = {

    chapterTitle: chapterTitle,

    videos: []

    }

   

    videos.each(function(item) {

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

    var videoTitle = video.text()

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

     

    chapterData.videos.push({

    title: videoTitle,

    id: id

    })

    })

   

    courseData.video.push(chapterData)

    })

    return courseData

}


function printCourseInfo(coursesData) {

    coursesData.forEach(function(courseData){

   

    console.log('------------------------------------------'+courseData.num + '人学过 '+ courseData.title +'------------------------------------------'+ '\n' )

   

    courseData.video.forEach(function(val) {

console.log('############# ' + (val.chapterTitle).replace(/(^\s*)|(\s*$)/g, "") + '############# ')

console.log("\n")

//               console.log('\t'+'【 id'+ (val.videos[0].id).replace(/(^\s*)|(\s*$)/g, "")+' 】'+((val.videos)[0].title).replace(/(^\s*)|(\s*$)/g, "") +'\n')

//               console.log("-----------------------------------------------------")

                  

                  val.videos.forEach(function(item){

                  console.log('\t 【 id '+item.id+" 】   "+(item.title).replace(/(^\s*)|(\s*$)/g, ""))

                   

                  })

})

    })

}


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 fetchCourseArray = []

videoIds.forEach(function(id){

fetchCourseArray.push(getPageAsync(baseUrl + id))

})


Promise

  .all(fetchCourseArray) 

    .then(function(pages){

    var coursesData = []

    pages.forEach(function(html){

    var course = filterChapters(html)

   

    coursesData.push(course)

    })

   

    coursesData.sort(function(a, b){

    return a.number < b.number

    })

   

    printCourseInfo(coursesData)

    })


正在回答

1 回答

666

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

举报

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

本教程带你攻破 Nodejs,让 JavaScript流畅运行在服务器端

进入课程

小小代码,有点意思哈

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