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 相关文章推荐
设置下载不需要倒计时cookie(倒计时代码)
Nov 19 Javascript
在网页里看flash的trace数据的js类
Jan 10 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
Sep 08 Javascript
高亮显示web页表格行的javascript代码
Nov 19 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
javascript中如何处理引号编码"
Aug 15 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
AngularJS入门教程一:路由用法初探
May 27 Javascript
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
webpack自动打包和热更新的实现方法
Jun 24 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript 写类方式之五
2009/07/05 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
django基础之数据库操作方法(详解)
2017/05/24 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
tensorboard显示空白的解决
2020/02/15 Python
python爬虫实现获取下一页代码
2020/03/13 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
.net笔试题
2014/03/03 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
自我鉴定的范文
2013/10/03 职场文书
运动会广播稿30字
2014/01/21 职场文书
20年同学聚会感言
2014/02/03 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
导游词之山东八大关
2019/12/18 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript