// 引入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:
[ '投资',
'融资',
'并购',
'风控',
'投资经理',
'分析师',
'投资助理',
'融资',
'并购',
'行业研究',
'投资者关系',
'资产管理',
'理财顾问',
'交易员',
'风控',
'资信评估',
'合规稽查',
'律师',
'审计',
'法务',
'会计',
'清算',
'投资总监',
'融资总监',
'并购总监',
'风控总监',
'副总裁' ] } ]