手把手教你用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 相关文章推荐
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
基于slideout.js实现移动端侧边栏滑动特效
Nov 28 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
vue中datepicker的使用教程实例代码详解
Jul 08 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 Javascript
swiper实现导航滚动效果
Dec 13 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
B2K与车机的中波PK
2021/03/02 无线电
供参考的 php 学习提高路线分享
2011/10/23 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
json 定义
2008/06/10 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
Js 中debug方式
2010/02/07 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
js中document.write的那点事
2014/12/12 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
ES6中参数的默认值语法介绍
2017/05/03 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
《王二小》教学反思
2014/02/27 职场文书
小学生操行评语大全
2014/04/22 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
黄山导游词
2015/01/31 职场文书
环保证明
2015/06/23 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL