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 相关文章推荐
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
Feb 22 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
Vuejs第十三篇之组件——杂项
Sep 09 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
webpack-dev-server自动更新页面方法
Feb 22 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
英文商务邀请信
2014/01/22 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
活动总结书怎么写
2015/05/11 职场文书
环保建议书作文500字
2015/09/14 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
防止web项目中的SQL注入
2021/12/06 MySQL
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers