手把手教你用Node.js爬虫爬取网站数据的方法


Posted in Javascript onJuly 05, 2018

开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请看一下安装教程......

直接开始吧

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

npm install superagent --save-dev

SuperAgent(官网是这样解释的)

-----SuperAgent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node.js!

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

npm install cheerio --save-dev

Cheerio

-----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.看注释啦(这里爬取的是boss直聘网站的数据)
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编辑器)");
      }
    });
  });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 获取用户客户端操作系统版本
Aug 25 Javascript
JQuery 网站换肤功能实现代码
Nov 02 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
Javascript中获取出错代码所在文件及行数的代码
Sep 23 Javascript
JavaScript中的property和attribute介绍
Dec 26 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
jquery简单倒计时实现方法
Dec 18 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
原生JS实现层叠轮播图
May 17 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 #Javascript
vue两个组件间值的传递或修改方式
Jul 04 #Javascript
jQuery实现炫丽的3d旋转星空效果
Jul 04 #jQuery
jQuery实现table表格checkbox全选的方法分析
Jul 04 #jQuery
React组件内事件传参实现tab切换的示例代码
Jul 04 #Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 #Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 #Javascript
You might like
php简单获取目录列表的方法
2015/03/24 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python 调用Java实例详解
2017/06/02 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python切图九宫格的实现方法
2019/10/10 Python
python dumps和loads区别详解
2020/02/04 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
毕业生就业自荐书
2013/12/15 职场文书
安全教育心得体会
2013/12/29 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
初中同学会致辞
2015/08/01 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书