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 常用函数
Dec 30 Javascript
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
vue路由跳转传递参数的方式总结
May 10 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
自考自我鉴定范文
2013/10/30 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
学习保证书100字
2015/02/26 职场文书
2015大学迎新标语
2015/07/16 职场文书
结婚纪念日感言
2015/08/01 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技