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 相关文章推荐
论坛特效代码收集(落伍转发-不错)
Dec 02 Javascript
js parsefloat parseint 转换函数
Jan 21 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
Aug 03 Javascript
js实现仿购物车加减效果
Mar 01 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
JS简单实现数组去重的方法分析
Oct 14 Javascript
JavaScript实现短暂提示框功能
Apr 04 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
部署vue+Springboot前后端分离项目的步骤实现
May 31 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下批量挂马和批量清马代码
2011/02/27 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
destoon二次开发入门示例
2014/06/20 PHP
浅谈php和.net的区别
2014/09/28 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
学习python的前途 python挣钱
2019/02/27 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
python 递归相关知识总结
2021/03/03 Python
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
奥巴马的演讲稿
2014/05/15 职场文书
心得体会的写法
2014/09/05 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫