Node.js实现简单的爬取的示例代码


Posted in Javascript onJune 25, 2019

学习【node.js】也有几天时间了,所以打算写着练练手;索然我作为一个后端的选手,写起来还有那么一丝熟悉的感觉。emmm~~ ‘货'不多讲 ,开搞........

首先是依赖选择:

Node.js实现简单的爬取的示例代码

代码块如下:

//引入依赖

//https请求

const https = require('https');

//简称node版的jquery

const cheerio = require('cheerio');

//解决防止出现乱码

const iconv = require('iconv-lite')

//http请求

const request = require("request");

//负责读写文件

const fs = require('fs');

//处理文件路径

const path = require('path');

爬取路径:

Node.js实现简单的爬取的示例代码

代码块:(PS:这里单独拿出来是因为这个站的素材比较推荐,可以上去瞅瞅~~)

const url = 'https://unsplash.com/';

初步实现:

网站的基本构成

Node.js实现简单的爬取的示例代码

这里主要是我们直接确认一下需要的【img】标签,以及外面的【figure】,然后直接就可以开工了....

核心代码:

//方法对象

const util = {

 

  getsrc: function (url) {

    https.get(url, res => {

      const chunks = [];

      res.on('data', chunk => {

        // chunks里面存储着网页的html内容

        chunks.push(chunk);

      });

      res.on('end', e => {

 

        let ALL = [];

        //编码格式

        let html = iconv.decode(Buffer.concat(chunks), 'utf8');

        let $ = cheerio.load(html, { decodeEntities: false });

 

        //标签遍历

        $("figure img").each(function (idex, elent) {

          let $elent = $(elent);

          let $srcset = $elent.attr("srcset");

          if ($srcset != undefined) {

            let src = ($srcset.split(',').pop()).split('?')[0];

            ALL.push({

              src: src

            })

          }

        });

        //遍历数组 每个后面加.jpg

        ALL.forEach(item => {

          util.downloadimg(item.src, path.basename(item.src) + ".jpg", function () {

            console.log(path.basename(item.src) + ".jpg");

          });

        })

      });

 

      res.on('error', e => {

        console.log('Error: ' + e.message);

      });

    });

  },

 

  //运行主函数

  main: function () {

    console.log("------start--------");

    util.getsrc(url);

  },

  //下载图片函数

  downloadimg: function (src, srcname, callback) {

 

    //http请求

    request.head(src, function (err, res, body) {

      if (err) {

        console.log('err:' + err);

        return false;

      }

      console.log('res: ' + res);

      //保存数据,这里是防止未来得及记录数据又开始读取数据而导致数据丢失

      request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback);

    });

  }

}

 

//主函数

util.main();

然后就可以运行 node xxx.js 看运行结果。

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

Javascript 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
js实现连个数字相加而不是拼接的方法
Feb 23 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
May 10 Javascript
深入探讨Vue.js组件和组件通信
Sep 12 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
node.js到底要不要加分号浅析
Jul 11 Javascript
解决vue v-for 遍历循环时key值报错的问题
Sep 06 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 #Javascript
vue 移动端注入骨架屏的配置方法
Jun 25 #Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 #Javascript
新手快速入门微信小程序组件库 iView Weapp
Jun 24 #Javascript
前端Vue项目详解--初始化及导航栏
Jun 24 #Javascript
微信小程序调用天气接口并且渲染在页面过程详解
Jun 24 #Javascript
微信小程序-可移动菜单的实现过程详解
Jun 24 #Javascript
You might like
生成静态页面的PHP类
2006/07/15 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
7个JS基础知识总结
2014/03/05 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
python strip()函数 介绍
2013/05/24 Python
python批量提取word内信息
2015/08/09 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Tesserocr库的正确安装方式
2018/10/19 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
企业承诺书怎么写
2014/05/24 职场文书
农行心得体会
2014/09/02 职场文书
小学教育见习报告
2014/10/31 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
实习生个人总结范文
2015/02/28 职场文书
升学宴学生致辞
2015/09/29 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis