Nodejs实现爬虫抓取数据实例解析


Posted in NodeJs onJuly 05, 2018

开始之前请先确保自己安装了Node.js环境,如果没有安装,大家可以到三水点靠木下载安装。

1.在项目文件夹安装两个必须的依赖包

npm install superagent --save-dev

superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下

npm install cheerio --save-dev

cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种Web爬虫程序。相当于node.js中的jQuery

2.新建  crawler.js  文件

//导入依赖包
const http    = require("http");
const path    = require("path");
const url    = require("url");
const fs     = require("fs");
const superagent = require("superagent");
const cheerio  = require("cheerio");

3.获取 Boos直聘数据

superagent
  .get("https://www.zhipin.com/job_detail/?city=100010000&source=10&query=%E5%89%8D%E7%AB%AF")
  .end((error,response)=>{
    //获取页面文档数据
    var content = response.text;
    //cheerio也就是nodejs下的jQuery 将整个文档包装成一个集合,定义一个变量$接收
    var $ = cheerio.load(content);
    //定义一个空数组,用来接收数据
    var result=[];
    //分析文档结构 先获取每个li 再遍历里面的内容(此时每个li里面就存放着我们想要获取的数据)
    $(".job-list li .job-primary").each((index,value)=>{
      //地址和类型为一行显示,需要用到字符串截取
      //地址
      let address=$(value).find(".info-primary").children().eq(1).html();
      //类型
      let type=$(value).find(".info-company p").html();
      //解码
      address=unescape(address.replace(/&#x/g,'%u').replace(/;/g,''));
      type=unescape(type.replace(/&#x/g,'%u').replace(/;/g,''))
      //字符串截取
      let addressArr=address.split('<em class="vline"></em>');
      let typeArr=type.split('<em class="vline"></em>');
      //将获取的数据以对象的形式添加到数组中
      result.push({
        title:$(value).find(".name .job-title").text(),
        money:$(value).find(".name .red").text(),
        address:addressArr,
        company:$(value).find(".info-company a").text(),
        type:typeArr,
        position:$(value).find(".info-publis .name").text(),
        txImg:$(value).find(".info-publis img").attr("src"),
        time:$(value).find(".info-publis p").text()
      });
      // console.log(typeof $(value).find(".info-primary").children().eq(1).html());
    });
    //将数组转换成字符串
    result=JSON.stringify(result);
    //将数组输出到json文件里 刷新目录 即可看到当前文件夹多出一个boss.json文件(打开boss.json文件,ctrl+A全选之后 ctrl+K,再Ctrl+F即可将json文件自动排版)
    fs.writeFile("boss.json",result,"utf-8",(error)=>{
      //监听错误,如正常输出,则打印null
      if(error==null){
        console.log("恭喜您,数据爬取成功!请打开json文件,先Ctrl+A,再Ctrl+K,最后Ctrl+F格式化后查看json文件(仅限Visual Studio Code编辑器)");
      }
    });
  });

总结

以上所述是小编给大家介绍的Nodejs实现爬虫抓取数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
nodejs的路径问题的解决
Jun 30 #NodeJs
nodejs用gulp管理前端文件方法
Jun 24 #NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 #NodeJs
nodejs实现套接字服务功能详解
Jun 21 #NodeJs
详解Nodejs mongoose
Jun 10 #NodeJs
详解NodeJs开发微信公众号
May 25 #NodeJs
nodejs express配置自签名https服务器的方法
May 22 #NodeJs
You might like
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php解析url的三个示例
2014/01/20 PHP
8个PHP数组面试题
2015/06/23 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
Python多进程机制实例详解
2015/07/02 Python
python编码最佳实践之总结
2016/02/14 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
Exception类的常用方法
2012/06/16 面试题
天鹅的故事教学反思
2014/02/04 职场文书
公司合作协议书范本
2014/04/18 职场文书
创业培训计划书
2014/05/03 职场文书
产品生产计划书
2014/05/07 职场文书
关于安全的标语
2014/06/10 职场文书
地雷战观后感
2015/06/09 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang