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中实现sleep功能实例
Mar 24 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
纯异步nodejs文件夹(目录)复制功能
Sep 03 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 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使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
ajax请求get与post的区别总结
2013/11/04 Javascript
js实现表格字段排序
2014/02/19 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
详解webpack2异步加载套路
2018/09/14 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python抓取电影天堂电影信息的代码
2016/04/07 Python
深入理解python中的select模块
2017/04/23 Python
python验证码识别实例代码
2018/02/03 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
启动仪式策划方案
2014/06/14 职场文书
公司岗位说明书
2015/10/08 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
详解PyTorch模型保存与加载
2022/04/28 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS