node http爬虫demo

一,代码

分析网页dom数据,列出章节列表

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')


    // [{
    //  chapterTitle: '',
    //  videos: [
    //    title: '',
    //    id: ''
    //  ]
    // }]

    var courseData = []

    chapters.each(function(item){
        var chapter = $(this)
        var chapterTitle = chapter.find('h3').text()
        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()
            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('获取课程数据出差错')
})

二,安装模块

cheerio是一个相当于jquery的模块

npm install cheerio

三,执行

node crawler.js

四,注意

1,forEach和each

要知道forEach和each的区别,你必须明白一点:forEach是js中的方法(针对数组),而each是jquery中的方法(针对jquery对象,即$( ) )。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值