node之小爬虫
一.概念
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫
二.基于https实现一个小爬虫
其原理就是:通过代码的方式,去请求这个网站,获取这个网站的html字符串内容,通过https去请求别的网络资源(一个对应的url地址其实就是一个网络资源),若对方网站是http协议,则使用http模块请求,然后对拉下来的html字符串内容进行各种解析工作,得到想要的数据.
在这里,我们会使用一个后端的类似于jquyer的包,包名叫做cheerio.
cheerio 可以像jquery那样去处理html字符串
// 引入https模块
const https = require("https");
//引入第三方依赖包 cheerio 类似jquery的语法
const cheerio = require("cheerio");
//请求的路径
const url = "https://www.zhipin.com/shenzhen/";
https.get(url, (res) => {
let raw = "";
//通过req的data事件监听函数,每当接受到请求体的数据,就累加到raw变量中
res.on("data", (chunk) => {
raw += chunk;
});
//监听 req 的 end 事件
res.on("end", () => {
findBoss(raw);
});
});
let findBoss = (htmlStr) => {
//装载整个爬取的内容
let result = [];
//使用cheerio装载整个html页面
const $ = cheerio.load(htmlStr);
//类似于jquery的语法,去获取想要得到的内容
$(".job-menu dl").find('dd').each((index, item) => {
let Name = $(item).find("b").text();
let subName = [];
$(item).find('a').each((k, v) => {
subName.push($(v).text());
});
result.push({
Name,
subName
});
});
console.log(result);
}
最后爬取到的结果为:
[ { Name: '技术', subName: [ 'Java', 'PHP', 'web前端', '算法工程师' ] },
{ Name: '产品', subName: [ '产品经理', '产品总监', '数据产品经理' ] },
{ Name: '设计', subName: [ 'UI设计师', '平面设计师', '交互设计师' ] },
{ Name: '运营', subName: [ '新媒体运营', '产品运营', '网络推广' ] },
{ Name: '市场', subName: [ '市场营销', '市场推广', '品牌公关', '策划经理' ] },
{ Name: '人事', subName: [ '人事/HR', '行政', '财务', '培训', '绩效考核' ] },
{ Name: '高级管理', subName: [ '总裁/总经理/CEO', '分公司/代表处负责人' ] },
{ Name: '销售', subName: [ '销售专员', '销售经理', '销售工程师' ] },
{ Name: '媒体', subName: [ '文案', '广告创意', '编辑', '记者', '媒介经理' ] },
{ Name: '金融', subName: [ '投资经理', '投资总监', '风控', '证券' ] },
{ Name: '教育培训', subName: [ '课程设计', '教务管理', 'IT培训' ] },
{ Name: '医疗健康', subName: [ '药剂师', '营养师', '医疗器械研究' ] },
{ Name: '采购贸易', subName: [ '采购经理', '采购主管', '进出口贸易' ] },
{ Name: '供应链/物流', subName: [ '物流专员', '贸易跟单', '供应链经理' ] },
{ Name: '房地产/建筑', subName: [ '物业管理', '房地产规划开发' ] },
{ Name: '咨询/翻译/法律', subName: [ '企业管理咨询', '事务所律师' ] },
{ Name: '旅游', subName: [ '旅游顾问', '导游', '旅游产品开发/策划' ] },
{ Name: '服务业', subName: [ '酒店前台', '客房服务员', '发型师' ] },
{ Name: '生产制造', subName: [ '生产总监', '安全员', '质量管理/测试' ] } ]
我这边写的一个小示例是爬取boss直聘职位菜单的数据.那么,这一个小小的爬虫就实现了,其实还有很多内容,后面慢慢来扩展.
三.cheerio 第三方模块
链接:https://www.npmjs.com/package/cheerio
cheerio: 简单理解为是使用在服务器端的 jquery。保留了 jquery 选择器的相关功能,去掉了 DOM 操作功能。
1.安装模块
$ npm install cheerio
2. 引入
const cheerio =require('cheerio');
3.装载
const $=cheerio.load('<div class="box">Hello World</div>');
4. 使用响应的API
类似于jquery操作