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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
Sep 19 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
vuejs响应用户事件(如点击事件)
Mar 14 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
关于vue的npm run dev和npm run build的区别介绍
Jan 14 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
详解JavaScript数据类型和判断方法
Sep 04 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中array_keys和array_unique函数源码的分析
2016/02/26 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
关于js类的定义
2011/06/28 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
js计算精度问题小结
2013/04/22 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
网络技术支持面试题
2013/04/22 面试题
社区敬老月活动实施方案
2014/02/17 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
成立公司计划书
2014/05/07 职场文书
班级标语大全
2014/06/21 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
党校党性分析材料
2014/12/19 职场文书
2015年消防工作总结
2015/04/24 职场文书
学生安全责任协议书
2016/03/22 职场文书
学生会自荐信
2019/05/16 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
Django一小时写出账号密码管理系统
2021/04/29 Python
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang