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进程管理模块forever详解
Jun 01 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 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
php mysql数据库操作类
2008/06/04 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
基于datagrid框架的查询
2013/04/08 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
人力资源管理专业学生自我评价
2013/11/20 职场文书
学校元旦晚会方案
2014/02/19 职场文书
美术课外活动总结
2014/07/08 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2014年营销工作总结
2014/11/22 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技