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 url验证(url-valid)的使用方法
Nov 18 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
nodejs基础知识
Feb 03 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
php实现多城市切换特效
2015/08/09 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
python动态参数用法实例分析
2015/05/25 Python
python 获取字符串MD5值方法
2018/05/29 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
详解Python做一个名片管理系统
2019/03/14 Python
numpy.where() 用法详解
2019/05/27 Python
python logging模块的使用总结
2019/07/09 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
最美家庭活动方案
2014/08/31 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书