仿教程 小爬虫抓取imooc数据

Posted LarryZeal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿教程 小爬虫抓取imooc数据相关的知识,希望对你有一定的参考价值。

 

慕课网的nodejs教程:http://www.imooc.com/learn/348

这人讲的很赞,特别是在事件驱动这点上,耳目一新。

 

视频略老,所以demo有些过时了,摸索着写了一个自己的小程序。

比较痛苦的是最近半年几乎没写过jQuery,不少用法实在想不起来,好在翻着API也不是什么问题。

 

首先,npm install cheerio,可以认为cheerio这货就是nodejs版本的jQuery,用法应该完全一致。

然后就可以愉快的敲代码了:

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 = $(‘div.chapter‘)

    var courseData = []

    chapters.each(function () {
        var chapter=$(this) // $(this)的用法可以让回调方法省略参数
        // var chapterTitle = chapter.find(‘strong‘).text().trim()
        var chapterTitle = chapter.find(‘strong‘).contents().filter(function() { return this.nodeType === 3; }).text().trim(); 
        var videos=chapter.find(‘ul‘).children()
        var chapterData = { // 定义一个json以接收数据
            chapterTitle : chapterTitle,
            videos:[]
        }

        videos.each(function () {
            var video=$(this).find(‘a‘)
            var temp=video.text().trim()
            // var temp=video.contents().filter(function() { return this.nodeType === 3; }).text().trim(); 
            var arr = temp.split(‘\n‘) // 多层标签的文本都拼到一起了,要拆开,取用需要的值
            var videoTitle = arr[0].trim() + ‘ ‘ +arr[1].trim()
            var id=video.attr(‘href‘).split(‘video/‘)[1].trim()

            chapterData.videos.push({ // 填写数据 
                title : videoTitle,
                id : id
            })
        })

        courseData.push(chapterData)
    })

    return courseData
}
// 输出函数 
function printCourseData(courseData) {
    courseData.forEach(function (item) {
        var chapterTitle = item.chapterTitle

        console.log(chapterTitle )

        item.videos.forEach(function (video) {
            console.log(‘---【‘+video.id + ‘】 ‘ + video.title.trim() )
        })
    })
}
// 拿到源码,调用方法进行解析及输出
http.get(url, function(res){
    var html = ‘‘

    res.on(‘data‘, function (data) {
        html+=data
    })

    res.on(‘end‘,function(){
        var courseData = filterChapters(html)
        printCourseData(courseData)
    })
}).on(‘error‘, function () {
    console.log(‘获取课程数据出错了‘)
})

以上是关于仿教程 小爬虫抓取imooc数据的主要内容,如果未能解决你的问题,请参考以下文章

Python 开发轻量级爬虫08

python之爬虫学习记录与心得

网络爬虫抓取数据 有啥好的应用

Python爬虫入门教程 17-100 博客抓取数据

Python爬虫新手教程:微医挂号网医生数据抓取

Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy