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

报错...心酸

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)


正在回答

1 回答

Cannot read property 'split' of undefined-------这个错我解决了,不知道是不是最佳方案。把video.attr('href').split('video/')[1]改成String(video.attr('href')).split('video/')[1]。因为video.attr('href')格式不对,为什么老师的可以,具体我也不知道

1 回复 有任何疑惑可以回复我~
#1

Dog_leash 提问者

非常感谢!谢谢呢
2016-11-25 回复 有任何疑惑可以回复我~
#2

Cheongkin

我也遇到了同样的问题,然后采用了你的方案,竟然可以了。到底是为什么呢?版本问题吗???我用的是最新的版本。请教一下,原来的方案跟String(video.attr...这个有什么不一样吗?
2017-03-13 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

报错...心酸

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