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的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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将数据导入到Foxmail
2006/10/09 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
python绘制雷达图实例讲解
2021/01/03 Python
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
求职自荐信格式
2013/12/04 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
食品行业求职人的自我评价
2014/01/19 职场文书
宝宝周岁宴答谢词
2014/01/26 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2014年教务处工作总结
2014/12/03 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
基于Redis的List实现特价商品列表功能
2021/08/30 Redis