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 相关文章推荐
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
Chrome扩展页面动态绑定JS事件提示错误
Feb 11 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
浅谈在js传递参数中含加号(+)的处理方式
Oct 11 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
Sep 01 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
如何在vue中使用ts的示例代码
Feb 28 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 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跨时区(UTC时间)应用解决方案
2013/01/11 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript的事件描述
2006/09/08 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
python基础教程之Hello World!
2014/08/29 Python
python中文编码问题小结
2014/09/28 Python
Python中自定义函数的教程
2015/04/27 Python
python实现图片处理和特征提取详解
2017/11/13 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
英国日常交易网站:Wowcher
2018/09/04 全球购物
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
详解vue身份认证管理和租户管理
2021/05/25 Vue.js