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 相关文章推荐
真正的JQuery.ajax传递中文参数的解决方法
May 28 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
jquery实现模拟百分比进度条渐变效果代码
Oct 29 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
JS实现加载和读取XML文件的方法详解
Apr 24 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
Mar 05 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
Webpack按需加载打包chunk命名的方法
Sep 22 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程序员应具有的7种能力小结
2014/11/27 PHP
php中的动态调用实例分析
2015/01/07 PHP
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
iview实现图片上传功能
2020/06/29 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
wxPython实现文本框基础组件
2019/11/18 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
办公室助理岗位职责
2013/12/25 职场文书
军训 自我鉴定
2014/02/03 职场文书
财务总经理岗位职责
2014/02/16 职场文书
管理提升方案
2014/06/04 职场文书
何玥事迹观后感
2015/06/16 职场文书