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 模块开发及发布详解分享
Mar 07 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
php实现映射操作实例详解
2019/10/02 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
python爬取51job中hr的邮箱
2016/05/14 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
什么是.net
2015/08/03 面试题
授权委托书公证
2014/09/14 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python