• HTTP小爬虫 ,nodejs学习(二)


    使用nodejs抓取网页数据,这里用到cheerio,解析html十分好用,和jquery用法完全一致。

    首先安装cheerio,在命令行中输入 npm install cheerio;(在nodejs根目录下输入该命令)

    安装完成以后,我们来解析慕课网上http://www.imooc.com/learn/348,获取其上的课程信息。

    代码如下:

    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 + '
    ';
            item.videos.forEach(function(item){
                str += ' 【' + item.id + '】 ' + item.title + '
    ';
            });
        });
        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!');
    });

    结果:

    第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/348

  • 相关阅读:
    线性同余方程模板( A+C*x=B(mod D) )
    线性同余方程组模板( x=r0(mod m0) )
    poj2891(线性同余方程组)
    BestCoder Round #63 (div.2)
    16.实现多个具有相同方法的接口和父类与实现接口有相同方法
    14.Java中的StringTokenizer类的使用方法
    13.Java为什么不支持多继承
    bootstrap使用基础
    Js 百分比进度条
    Js更改样式导致hover效果消失
  • 原文地址:https://www.cnblogs.com/maheng/p/4889469.html
Copyright © 2020-2023  润新知