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服务器(10):处理POST请求
Dec 18 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 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+MSSQL分页的例子
2006/10/09 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php使用websocket示例详解
2014/03/12 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
python测试驱动开发实例
2014/10/08 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
python中的decorator的作用详解
2018/07/26 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
python中PyQuery库用法分享
2021/01/15 Python
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
年终总结会议主持词
2014/03/17 职场文书
汽修专业自荐信
2014/07/07 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
电影建党伟业观后感
2015/06/01 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python