亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

源碼分享,求指點

本人初學,根據提示,查了點資料,最終效果如下:

http://img1.sycdn.imooc.com//5aadff530001e44903640325.jpg

歡迎交流指點,共同進步

var?http?=?require('http')
var?Promise?=?require('bluebird')
var?cheerio?=?require('cheerio')
var?baseurl?=?'http://www.xianlaiwan.cn/learn/'
var?basenumurl?=?'http://www.xianlaiwan.cn/course/AjaxCourseMembers?ids='
var?url?=?'http://www.xianlaiwan.cn/learn/348'

var?videoIds?=?[728,?637,?348,?259,?197,?134,?75]

function?filterChapters(html,?number)?{
????var?$?=?cheerio.load(html)

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

????//console.log(chapters)

????var?title?=?$('.path?span').text()

????//console.log(title)

????//?courseData?=?{
????//?????title:?title,
????//?????number:?number,
????//?????videos:?[{
????//?????????chapterTitle:?'',
????//?????????videos:?[
????//?????????????title:?'',
????//?????????????id:?''
????//?????????]
????//?????}]
????//?}

????var?courseData?=?{
????????title:?title,
????????number:?number,
????????chapters:?[]
????}

????chapters.each(function(item)?{
????????var?chapter?=?$(this)
????????var?chapterTitle?=?chapter.find('strong').text().split('\n')[2].trim()
????????????//console.log(chapterTitle)
????????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().split('\n')[2].trim()
????????????????//?console.log(videoTitle)
????????????var?id?=?video.attr('href').split('video/')[1]
????????????????//?console.log(id)

????????????chapterData.videos.push({
????????????????title:?videoTitle,
????????????????id:?id
????????????})
????????})

????????courseData.chapters.push(chapterData)
????})
????return?courseData
}

function?printCourseInfo(coursesData)?{
????coursesData.forEach(function(courseData)?{
????????var?title?=?courseData.title
????????var?number?=?courseData.number
????????console.log(title?+?"學習人數【"?+?number?+?"】\n")
????})

????coursesData.forEach(function(courseData)?{
????????var?title?=?courseData.title
????????console.log("===========【"?+?title?+?"】===========\n")

????????var?chapters?=?courseData.chapters
????????chapters.forEach(function(item)?{
????????????var?chapterTitle?=?item.chapterTitle

????????????console.log(chapterTitle?+?'\n')

????????????item.videos.forEach(function(video)?{
????????????????console.log('???【'?+?video.id?+?'】'?+?video.title?+?'\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()?{
????????????????//var?courseData?=?filterChapters(html)

????????????????//printCourseInfo(courseData)
????????????????resolve(html)
????????????})
????????}).on('error',?function(e)?{
????????????reject(e)
????????????????//console.log('獲取課程數據出錯')
????????})
????})
}


function?getPageNumberAsync(url)?{
????return?new?Promise(function(resolve,?reject)?{
????????console.log('正在爬取網頁人數'?+?url)

????????http.get(url,?function(res)?{
????????????var?num?=?''
????????????res.on('data',?function(data)?{
????????????????var?dat?=?JSON.parse(data)
????????????????num?=?dat.data[0].numbers
????????????????????//console.log(num)
????????????})

????????????res.on('end',?function()?{
????????????????resolve(num)
????????????})
????????}).on('error',?function(e)?{
????????????reject(e)
????????})
????})
}

function?getCourseDataAsync(id)?{
????return?new?Promise(function(resolve,?reject)?{
????????var?p1?=?getPageAsync(baseurl?+?id)

????????var?p2?=?getPageNumberAsync(basenumurl?+?id)

????????Promise.all([p1,?p2])
????????????.then(function(result)?{
????????????????var?course?=?{
????????????????????html:?result[0],
????????????????????number:?result[1]
????????????????}
????????????????resolve(course)

????????????????//console.log(fetchCourseArray)
????????????})
????????????.catch(function(err)?{
????????????????reject(err)
????????????})
????})
}

var?fetchCourseArray?=?[]

videoIds.forEach(function(id)?{
????fetchCourseArray.push((getCourseDataAsync(id)))
})

Promise
????.all(fetchCourseArray)
????.then(function(pages)?{
????????var?coursesData?=?[]

????????//console.log(pages)

????????pages.forEach(function(course)?{
????????????var?courses?=?filterChapters(course.html,?course.number)

????????????coursesData.push(courses)
????????})

????????coursesData.sort(function(a,?b)?{
????????????return?a.number?<?b.number
????????})

????????//console.log(coursesData)
????????printCourseInfo(coursesData)
????})


正在回答

1 回答

加油哦

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

舉報

0/150
提交
取消
進擊Node.js基礎(二)
  • 參與學習       76735    人
  • 解答問題       242    個

本教程帶你攻破 Nodejs,讓 JavaScript流暢運行在服務器端

進入課程

源碼分享,求指點

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號