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学习笔记之NET模块
Jan 13 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 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
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
python微元法计算函数曲线长度的方法
2018/11/08 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
python实现名片管理系统项目
2019/04/26 Python
python 实现二维列表转置
2019/12/02 Python
Python selenium的基本使用方法分析
2019/12/21 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
django从后台返回html代码的实例
2020/03/11 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
实习生自我评价
2014/01/18 职场文书
大专生自我评价
2014/01/28 职场文书
自主招生自荐信指南
2014/02/04 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
公司收款委托书范本
2014/09/20 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python