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分页类代码分享
Jun 17 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
nodejs更改项目端口号的方法
May 13 NodeJs
NodeJS 中Stream 的基本使用
Jul 30 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 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 动态执行带有参数的类方法
2009/04/10 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
js 对象是否存在判断
2009/07/15 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python 类的继承实例详解
2017/03/25 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
县级文明单位申报材料
2014/05/23 职场文书
时尚女魔头观后感
2015/06/04 职场文书
城南旧事电影观后感
2015/06/16 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang