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中实现sleep功能实例
Mar 24 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs取得当前执行路径的方法
May 13 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
php银联网页支付实现方法
2015/03/04 PHP
详解PHP中的Traits
2015/07/29 PHP
php冒泡排序与快速排序实例详解
2015/12/07 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
python with statement 进行文件操作指南
2014/08/22 Python
利用Python破解验证码实例详解
2016/12/08 Python
python实现简易动态时钟
2018/11/19 Python
Python检查ping终端的方法
2019/01/26 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
寄语十八大感言
2014/02/07 职场文书
公司委托书格式范本
2014/09/16 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python