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
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 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 面向对象实现代码
2009/11/11 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
限制复选框的最大可选数
2006/07/01 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
angular十大常见问题
2017/03/07 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python自动化之Ansible的安装教程
2019/06/13 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python中reload重载实例用法
2020/12/15 Python
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
敬老院院长事迹材料
2014/05/21 职场文书
致青春观后感
2015/06/09 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
Linux中如何安装并部署Redis
2022/04/18 Servers