使用nodeJs进行简单的网站信息的爬取

// 引入https模块,由于我们爬取的网站采用的是https协议
const https = require('https');
// 引入cheerio模块,使用这个模块可以将爬取的网页源代码进行装载,然后使用类似jquery的语法去操作这些元素
// 在cheerio不是内置模块,需要使用包管理器下载安装
const cheerio = require('cheerio');
// 这里以爬取拉钩网为例
var url = "https://www.lagou.com/";
// 使用https模块中的get方法,获取指定url中的网页源代码
https.get(url, function (res) {
    var html = '';
    // 每当我们从指定的url中得到数据的时候,就会触发res的data事件,事件中的chunk是每次得到的数据,data事件会触发多次,因为一个网页的源代码并不是一次性就可以下完的
    res.on("data", function (chunk) {
        html += chunk;
    });
    // 当网页的源代码下载完成后, 就会触发end事件
    res.on("end", function () {
        //这里我们对下载的源代码进行一些处理
        doSomeThing(html);

    });
});
function doSomeThing(html) {
    // 使用cheerio模块装载我们得到的页面源代码,返回的是一个类似于jquery中的$对象
    var $ = cheerio.load(html);
    //使用这个$对象就像操作jquery对象一般去操作我们获取得到的页面的源代码
    var $menu_box = $(".menu_box");
    // 将我们需要的文字信息存储在一个数组中
    var result = [];
    $menu_box.each(function (i, item) {
        var obj = {};
        var h2 = $(item).find("h2").text().trim();
        obj.name = h2;
        var $as = $(item).find("a");
        obj.subName = [];
        $as.each(function (i, item) {
            obj.subName.push($(item).text());
        });
        result.push(obj);
    });
    //最后我们输出这个结果
    console.log(result);
}

最后从网站上爬取到的结果为

 [ { name: '技术',
    subName:
     [ 'Java',
       'PHP',
       'C++',
       '区块链',
       'Android',
       'iOS',
       '数据挖掘',
       '深度学习',
       '自然语言处理',
       '机器学习',
       '测试',
       'html5',
       '技术总监',
       '架构师',
       'CTO',
       'Java',
       'C++',
       'PHP',
       '数据挖掘',
       '搜索算法',
       '精准推荐',
       'C',
       'C#',
       '全栈工程师',
       '.NET',
       'Hadoop',
       'Python',
       'Delphi',
       'VB',
       'Perl',
       'Ruby',
       'Node.js',
       'Go',
       'ASP',
       'Shell',
       '区块链',
       '后端开发其它',
       'HTML5',
       'Android',
       'iOS',
       'WP',
       '移动开发其它',
       'web前端',
       'Flash',
       'html5',
       'JavaScript',
       'U3D',
       'COCOS2D-X',
       '前端开发其它',
       '深度学习',
       '机器学习',
       '图像处理',
       '图像识别',
       '语音识别',
       '机器视觉',
       '算法工程师',
       '自然语言处理',
       '测试工程师',
       '自动化测试',
       '功能测试',
       '性能测试',
       '测试开发',
       '游戏测试',
       '白盒测试',
       '灰盒测试',
       '黑盒测试',
       '手机测试',
       '硬件测试',
       '测试经理',
       '测试其它',
       '运维工程师',
       '运维开发工程师',
       '网络工程师',
       '系统工程师',
       'IT支持',
       'IDC',
       'CDN',
       'F5',
       '系统管理员',
       '病毒分析',
       'WEB安全',
       '网络安全',
       '系统安全',
       '运维经理',
       '运维其它',
       'MySQL',
       'SQLServer',
       'Oracle',
       'DB2',
       'MongoDB',
       'ETL',
       'Hive',
       '数据仓库',
       'DBA其它',
       '技术经理',
       '技术总监',
       '架构师',
       'CTO',
       '运维总监',
       '技术合伙人',
       ... 28 more items ] },
  { name: '产品',
    subName:
     [ '产品总监',
       '产品经理',
       '数据产品经理',
       '游戏策划',
       '产品经理',
       '网页产品经理',
       '移动产品经理',
       '产品助理',
       '数据产品经理',
       '电商产品经理',
       '游戏策划',
       '产品实习生',
       '网页产品设计师',
       '无线产品设计师',
       '产品部经理',
       '产品总监',
       '游戏制作人' ] },
  { name: '设计',
    subName:
     [ 'UI设计师',
       '交互设计',
       '网页设计师',
       '平面设计师',
       '视觉设计师',
       '视觉设计师',
       '网页设计师',
       'Flash设计师',
       'APP设计师',
       'UI设计师',
       '平面设计师',
       '美术设计师(2D/3D)',
       '广告设计师',
       '多媒体设计师',
       '原画师',
       '游戏特效',
       '游戏界面设计师',
       '游戏场景',
       '游戏角色',
       '游戏动作',
       '交互设计师',
       '无线交互设计师',
       '网页交互设计师',
       '硬件交互设计师',
       '数据分析师',
       '用户研究员',
       '游戏数值策划',
       '设计经理/主管',
       '设计总监',
       '视觉设计经理/主管',
       '视觉设计总监',
       '交互设计经理/主管',
       '交互设计总监',
       '用户研究经理/主管',
       '用户研究总监' ] },
  { name: '运营',
    subName:
     [ '新媒体运营',
       '编辑',
       '数据运营',
       '运营总监',
       'COO',
       '用户运营',
       '产品运营',
       '数据运营',
       '内容运营',
       '活动运营',
       '商家运营',
       '品类运营',
       '游戏运营',
       '网络推广',
       '运营专员',
       '网店运营',
       '新媒体运营',
       '海外运营',
       '运营经理',
       '副主编',
       '内容编辑',
       '文案策划',
       '记者',
       '售前咨询',
       '售后客服',
       '淘宝客服',
       '客服经理',
       '主编',
       '运营总监',
       'COO',
       '客服总监' ] },
  { name: '市场与销售',
    subName:
     [ '市场推广',
       '市场总监',
       '市场策划',
       'BD',
       '销售总监',
       '销售经理',
       '市场营销',
       '市场策划',
       '市场顾问',
       '市场推广',
       'SEO',
       'SEM',
       '商务渠道',
       '商业数据分析',
       '活动策划',
       '网络营销',
       '海外市场',
       '政府关系',
       '媒介经理',
       '广告协调',
       '品牌公关',
       '销售专员',
       '销售经理',
       '客户代表',
       '大客户代表',
       'BD经理',
       '商务渠道',
       '渠道销售',
       '代理商销售',
       '销售助理',
       '电话销售',
       '销售顾问',
       '商品经理',
       '物流',
       '仓储',
       '采购专员',
       '采购经理',
       '商品经理',
       '分析师',
       '投资顾问',
       '投资经理',
       '市场总监',
       '销售总监',
       '商务总监',
       'CMO',
       '公关总监',
       '采购总监',
       '投资总监' ] },
  { name: '职能',
    subName:
     [ 'HR',
       '行政',
       '财务',
       '审计',
       '人力资源',
       '招聘',
       'HRBP',
       '人事/HR',
       '培训经理',
       '薪资福利经理',
       '绩效考核经理',
       '员工关系',
       '助理',
       '前台',
       '行政',
       '总助',
       '文秘',
       '会计',
       '出纳',
       '财务',
       '结算',
       '税务',
       '审计',
       '风控',
       '法务',
       '律师',
       '专利',
       '行政总监/经理',
       '财务总监/经理',
       'HRD/HRM',
       'CFO',
       'CEO' ] },
  { name: '金融',
    subName:
     [ '投资',
       '融资',
       '并购',
       '风控',
       '投资经理',
       '分析师',
       '投资助理',
       '融资',
       '并购',
       '行业研究',
       '投资者关系',
       '资产管理',
       '理财顾问',
       '交易员',
       '风控',
       '资信评估',
       '合规稽查',
       '律师',
       '审计',
       '法务',
       '会计',
       '清算',
       '投资总监',
       '融资总监',
       '并购总监',
       '风控总监',
       '副总裁' ] } ]

你可能感兴趣的:(使用nodeJs进行简单的网站信息的爬取)