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中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
nodejs导出excel的方法
Jun 30 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 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
apache+php+mysql安装配置方法小结
2010/08/01 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
layui分页效果实现代码
2017/05/19 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
教大家使用Python SqlAlchemy
2016/02/12 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
开学典礼演讲稿
2014/05/23 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
2016公司新年问候语
2015/11/11 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js