node.js 小爬虫抓取网页数据

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

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

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').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 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(vedio) {
            console.log('---[' + vedio.id + ']' + vedio.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('获取课程数据出错!')
})

node.js 小爬虫抓取网页数据(2)

http://blog.csdn.net/sunnylinner/article/details/52968352

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值