报错...心酸
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 = $('.chapter')
/* [{
chaoterTitle: '',
videos: [
title: '',
id: ''
]
}]*/
var courseData = []
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('.studyvideo')
var videoTitle = video.text()
var id = video.attr('href').split('video/')[1]
chapterData.videos.push({
title:videoTitle,
id: id
})
})
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.id + ']' +video.title +'\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() {
console.log('获取课程数据出错')
})
在git上运行出现一下报错
$ npm install cheerio
nodejslearn@1.0.0 C:\Alec\Workshop\NodejsLearn
+-- cheerio@0.22.0 extraneous
`-- gulp@3.9.1 extraneous
npm WARN nodejslearn@1.0.0 No description
npm WARN nodejslearn@1.0.0 No repository field.
Alec@Lenovo-PC MINGW64 /c/Alec/Workshop/NodejsLearn/imooc/http
$ node crawler.js
C:\Alec\Workshop\NodejsLearn\imooc\http\crawler.js:33
var id = video.attr('href').split('video/')[1]
^
TypeError: Cannot read property 'split' of undefined
at Object.<anonymous> (C:\Alec\Workshop\NodejsLearn\imooc\http\crawler.js:33:31)
at exports.each (C:\Alec\Workshop\NodejsLearn\node_modules\cheerio\lib\api\traversing.js:300:24)
at Object.<anonymous> (C:\Alec\Workshop\NodejsLearn\imooc\http\crawler.js:30:10)
at exports.each (C:\Alec\Workshop\NodejsLearn\node_modules\cheerio\lib\api\traversing.js:300:24)
at filterChapters (C:\Alec\Workshop\NodejsLearn\imooc\http\crawler.js:21:11)
at IncomingMessage.<anonymous> (C:\Alec\Workshop\NodejsLearn\imooc\http\crawler.js:67:20)
at emitNone (events.js:85:20)
at IncomingMessage.emit (events.js:179:7)
at endReadableNT (_stream_readable.js:906:12)
at nextTickCallbackWith2Args (node.js:475:9)