nodejs入门之小爬虫

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操作

发布了17 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuqiao0327/article/details/105105770