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 相关文章推荐
Auntion-TableSort国人写的一个javascript表格排序的东西
Nov 12 Javascript
jquery 框架使用教程 AJAX篇
Oct 11 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
javascript操作excel生成报表示例
May 08 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
Jun 21 Javascript
node+express制作爬虫教程
Nov 11 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
Sep 26 Javascript
原生JS实现留言板功能
Feb 08 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
文件系统基本操作类
2006/11/23 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
python实现自主查询实时天气
2018/06/22 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
包装类的功能、种类、常用方法
2012/01/27 面试题
大二法学专业职业生涯规划范文
2014/02/12 职场文书
医院搬迁方案
2014/06/14 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
医生见习报告范文
2014/11/03 职场文书
辞职信格式范文
2015/05/13 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
MySQL系列之十一 日志记录
2021/07/02 MySQL
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android