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基础资料整理2
Dec 06 Javascript
js 链式延迟执行DOME
Jan 04 Javascript
Array.prototype.concat不是通用方法反驳[译]
Sep 20 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
Dec 28 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
使用jquery获取url及url参数的简单实例
Jun 14 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
JS中this的指向以及call、apply的作用
May 06 Javascript
node.js自动上传ftp的脚本分享
Jun 16 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学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP微信API接口类
2016/08/22 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
Node.js console控制台简单用法分析
2019/01/04 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
python使用epoll实现服务端的方法
2018/10/16 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python实现ip代理池功能示例
2019/07/05 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
shell程序中如何注释
2012/01/28 面试题
经营理念口号
2014/06/21 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
java设计模式--原型模式详解
2021/07/21 Java/Android