NodeJs实现简单的爬虫功能案例分析


Posted in NodeJs onDecember 05, 2018

1.爬虫:爬虫,是一种按照一定的规则,自动地抓取网页信息的程序或者脚本;利用NodeJS实现一个简单的爬虫案例,爬取Boss直聘网站的web前端相关的招聘信息,以广州地区为例;

2.脚本所用到的nodejs模块

express     用来搭建一个服务,将结果渲染到页面

    swig          模板引擎

    cheerio      用来抓取页面的数据

    requests    用来发送请求数据(具体可查:https://www.npmjs.com/package/requests)

    async        用来处理异步操作,解决请求嵌套的问题,脚本中只使用了async.whilst(test,iteratee,callback),具体可见:https://caolan.github.io/async/

3.实现流程:

   首先先获取到所爬取页面的URL,打开boss直聘网站,搜索web前端既可以获取到 https://www.zhipin.com/c101280100-p100901/?page=1&ka=page-next

NodeJs实现简单的爬虫功能案例分析

   然后通过Chrome浏览器打开F12,获取到信息中多对应的dom节点,即可知道想要获取信息;

NodeJs实现简单的爬虫功能案例分析

   4.代码实现

      目录结构:

NodeJs实现简单的爬虫功能案例分析

      app.js

var cheerio = require('cheerio');
var requests = require('requests');
var async = require('async');
var express = require('express');
var swig = require('swig');
var app = express();
swig.setDefaults({cache:false});
app.set('views','./views/');
app.set('view engine','html');
app.engine('html',swig.renderFile);
app.get('/',function(req,res,next){
 var page = 1; //当前页数
 var list = []; //保存记录
 async.whilst(
  function(){
   return page < 11;
  },
  function(callback){
   requests(`https://www.zhipin.com/c101280100-p100901/?page=${page}&ka=page-next`)
   .on('data',function(chunk){
   var $ = cheerio.load(chunk.toString());
   $('.job-primary').each(function(){
    var company = $(this).find('.info-company .company-text .name').text();
    var job_title = $(this).find('.info-primary .name .job-title').text();
    var salary = $(this).find('.info-primary .name .red').text();
    var description = $(this).find('.info-company .company-text p').text();
    var area = $(this).find('.info-primary p').text();
    var item = {
     company:company,
     job_title:job_title,
     salary:salary,
     description:description,
     area:area
    };
    list.push(item);
   });
   page++;
   callback();
   }).on('end',function(err){
     if(err){
      console.log(err);
     }
     if(page==10){
     res.render('index',{
      lists:list
     });
    }
   });
  },
  function(err){
   console.log(err);
  }
 );
});

//监听
app.listen(8080);

 view/index.html页面

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<style>
 table{
  width:1300px;
  border:1px solid #ccc;
  border-collapse: collapse;
  text-align: center;
  margin:0 auto;
 }
 td,tr,th{
  border:1px solid #ccc;
  border-collapse: collapse;
 }
 tr{
  height:30px;
  line-height: 30px;
 }
</style>
<body>
 <table>
  <thead>
   <tr>
    <th>公司名称</th>
    <th>公司地址</th>
    <th>薪资</th>
    <th>公司描述</th>
    <th>岗位名称</th>
   </tr>
  </thead>
  <tbody>
   {% for list in lists %}
    <tr>
     <td>{{list.company}}</td>
     <td>{{list.area}}</td>
     <td>{{list.salary}}</td>
     <td>{{list.description}}</td>
     <td>{{list.job_title}}</td>
    </tr>
   {% endfor %}
  </tbody>
 </table>
</body>
</html>

5.启动

  直接通过 node app.js启动即可;

6.运行结果(http://localhost:8080),只截取部分数据

NodeJs实现简单的爬虫功能案例分析

总结

以上所述是小编给大家介绍的NodeJs实现简单的爬虫功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
nodejs通过phantomjs实现下载网页
May 04 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
nodeJS删除文件方法示例
Dec 25 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs body-parser 解析post数据实例
Jul 26 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 #NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 #NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 #NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 #NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 #NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 #NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 #NodeJs
You might like
重置版游戏视频
2020/04/09 魔兽争霸
php简单生成随机数的方法
2015/07/30 PHP
字符串的replace方法应用浅析
2011/12/06 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
Java的五个基础面试题
2016/02/26 面试题
光声世纪笔试题目
2012/08/25 面试题
上海天奕面试题笔试题
2015/04/19 面试题
经济管理专业自荐信
2013/12/30 职场文书
图书馆标语
2014/06/19 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
防卫过当辩护词
2015/05/21 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
Vue如何清空对象
2022/03/03 Vue.js
Pandas-DataFrame知识点汇总
2022/03/16 Python