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与Mysql的交互示例代码
Aug 18 NodeJs
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 NodeJs
使用forever管理nodejs应用教程
Jun 03 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 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中使用模板的方法
2008/05/24 PHP
PHP 文件类型判断代码
2009/03/13 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
python分割和拼接字符串
2013/11/01 Python
Python批量转换文件编码格式
2015/05/17 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python3实现逐字输出的方法
2019/01/23 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
详解Python模块化编程与装饰器
2021/01/16 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
我爱我校演讲稿
2014/05/21 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
家长会后的感想
2015/08/11 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android