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操作URL函数修改版
Nov 07 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
JS中Location使用详解
May 12 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
JS HTML5实现拖拽移动列表效果
Aug 27 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
Ajax实现页面无刷新留言效果
Mar 24 Javascript
JavaScript实现音乐播放器
Aug 14 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下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
javascript 面向对象实战思想分享
2017/09/07 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
python根据路径导入模块的方法
2014/09/30 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python解析nginx日志文件
2015/05/11 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
学年自我鉴定范文
2013/10/01 职场文书
小学教师培训感言
2014/02/11 职场文书
倡议书范文
2014/04/16 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python