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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
jquery显示和隐藏div特效实例
Feb 27 Javascript
判断JS对象是否拥有某种属性的两种方式
Dec 02 Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
JavaScript队列函数和异步执行详解
Jun 19 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
Jan 03 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
javascript中正则表达式语法详解
Aug 07 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伪静态的实现详细介绍
2013/04/28 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
php 魔术方法详解
2014/11/11 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
理解Koa2中的async&await的用法
2018/02/05 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
计算机专业毕业生求职信分享
2013/12/24 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
顶撞老师检讨书
2014/02/07 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
成本会计实训报告
2014/11/05 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
指导老师鉴定意见
2015/06/05 职场文书
高中物理教学反思
2016/02/19 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
nginx+lua单机上万并发的实现
2021/05/31 Servers