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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
js escape,unescape解决中文乱码问题的方法
May 26 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
Nov 20 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
JavaScript流程控制(分支)
Dec 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通过COM类调用组件的实现代码
2012/01/11 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
Javascript无阻塞加载具体方式
2013/06/28 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
python实现日志按天分割
2019/07/22 Python
django中related_name的用法说明
2020/05/20 Python
Python xlwt模块使用代码实例
2020/06/10 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
数控专业毕业生求职信范文
2013/09/21 职场文书
新闻编辑自荐信
2013/11/03 职场文书
团日活动总结书格式
2014/05/08 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
施工安全责任协议书
2016/03/23 职场文书
golang slice元素去重操作
2021/04/30 Golang
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫