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与CSS复习(二)
Jun 29 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
在JavaScript中实现类的方式探讨
Aug 28 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
js光标定位文本框回车表单提交问题的解决方法
May 11 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 Javascript
js读取json文件片段中的数据实例
Mar 09 Javascript
vue绑定事件后获取绑定事件中的this方法
Sep 15 Javascript
小程序实现横向滑动日历效果
Oct 21 Javascript
详细分析vue表单数据的绑定
Jul 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
轻松修复Discuz!数据库
2008/05/03 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
pip install命令安装扩展库整理
2021/03/02 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
宠物店的创业计划书范文
2014/01/11 职场文书
仓库规划计划书
2014/04/28 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
党支部三会一课计划
2014/09/24 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
导游词之南京中山陵
2019/11/27 职场文书
PHP中->和=>的意思
2021/03/31 PHP