HTTP小爬蟲 ,nodejs學習(二)

使用nodejs抓取網頁數據,這裏用到cheerio,解析html十分好用,和jquery用法徹底一致。html

首先安裝cheerio,在命令行中輸入 npm install cheerio;(在nodejs根目錄下輸入該命令)node

安裝完成之後,咱們來解析慕課網上http://www.imooc.com/learn/348,獲取其上的課程信息。jquery

代碼以下:web

var http = require('http');
var cheerio = require('cheerio');
var url = 'http://www.imooc.com/learn/348';

function filter(html){//抓取須要的課程信息
    var $ = cheerio.load(html);
    var chapters = $('.chapter');
    //var result = [{ chapterTitle:'', videos:[title:'', id:''] }];抓取結果的格式
    var result = [];
    chapters.each(function(){
        var item = $(this);
        var chapterTitle = item.find('strong').text();
        var videos = item.find('.video').find('li');
        var chapterData = {
            chapterTitle: chapterTitle,
            videos: []
        };
        videos.each(function(){
            var video = $(this).find('.studyvideo');
            var title = video.text().split(')')[0] + ')';//去除有用信息後面的空白
            //console.log(title);
            var id = video.attr('href').split('video/')[1];//只取課程視頻的編號
            chapterData.videos.push({
                title: title,
                id: id
            });
        });
        result.push(chapterData);
    });
    return result;
}

function printResult(result){//打印抓取結果
    var str = '';
    result.forEach(function(item){
        str += item.chapterTitle + '\n';
        item.videos.forEach(function(item){
            str += ' 【' + item.id + '】 ' + item.title + '\n';
        });
    });
    console.log(str);
}

http.get(url, function(res){
    var html = '';
    res.on('data', function(data){//獲取整個頁面的全部信息
        html += data;
    });
    res.on('end', function(){
        var result = filter(html);//過濾該頁面,抓取須要的課程信息
        printResult(result);//打印抓取的結果
    });    
}).on('error', function(){//在獲取頁面信息時發生錯誤
    console.log('error!');
});

結果:npm

第1章 前言
【6687】 1-1 前言 (01:20)
【6688】 1-2 爲何學習Nodejs (05:43)
第2章 安裝 Nodejs
【6689】 2-1 課程簡介 (01:19)
【6690】 2-2 Nodejs版本常識 (01:02)
【6691】 2-3 Windows下安裝Nodejs (04:43)
【6692】 2-4 Linux下安裝Nodejs (06:24)
【6693】 2-5 Mac下安裝Nodejs (03:55)
第3章 等不及了來嚐鮮
【6694】 3-1 起一個web服務器 (05:14)
【6695】 3-2 命令行中體驗 (02:47)
第4章 模塊與包管理工具
【6697】 4-1 Node.js 的模塊 與 Commonjs 規範 (03:44)
【6700】 4-2 模塊的分類 (00:45)
【6701】 4-3 簡單的Nodejs模塊 (09:23)
第5章 橫掃 Nodejs API
【6705】 5-1 不要陷入版本選擇的深淵 (02:32)
【6710】 5-2 URL網址解析的好幫手 (10:30)
【6711】 5-3 QueryString參數處理小利器 (06:40)
【6712】 5-4 HTTP知識先填坑 (09:43)
【6713】 5-5 HTTP知識填坑之「以慕課網爲例分析」 (10:13)
【7557】 5-6 HTTP 事件回調進階 (17:51)
【7558】 5-7 HTTP 源碼解讀之先了解做用域、上下文 (20:50)
【7963】 5-8 HTTP 源碼解讀 (22:08)
【7964】 5-9 HTTP 性能測試 (09:15)
【7965】 5-10 HTTP 小爬蟲 (17:33)
【8525】 5-11 事件模塊小插曲 (15:15)
【8837】 5-12 request方法 (17:56)服務器

本文是在學習了慕課網上的課程後發表的,網址:http://www.imooc.com/learn/348ide

相關文章
相關標籤/搜索