Node.js实现简单的爬取的示例代码

 更新时间:2019年06月25日 09:35:43   作者:毛寸头少年*  
这篇文章主要介绍了Node.js实现简单的爬取的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

学习【node.js】也有几天时间了,所以打算写着练练手;索然我作为一个后端的选手,写起来还有那么一丝熟悉的感觉。emmm~~ ‘货'不多讲 ,开搞........

首先是依赖选择:

代码块如下:

//引入依赖

//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');

爬取路径:

代码块:(PS:这里单独拿出来是因为这个站的素材比较推荐,可以上去瞅瞅~~)

const url = 'https://unsplash.com/';

初步实现:

网站的基本构成

这里主要是我们直接确认一下需要的【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 看运行结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Nodejs之TCP服务端与客户端聊天程序详解

    Nodejs之TCP服务端与客户端聊天程序详解

    这篇文章主要为大家详细介绍了Nodejs之TCP服务端与客户端聊天程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • nodejs实现黑名单中间件设计

    nodejs实现黑名单中间件设计

    最近写的项目中涉及到防止灌水的功能,于是设计了黑名单中间件,跟大家分享一下,同时也希望大家有好的建议能够拍砖.
    2014-06-06
  • yarn的安装及使用详解

    yarn的安装及使用详解

    Yarn 就是一个类似于 npm 的包管理工具,它是由 facebook 推出并开源,与 npm 相比,yarn 有着众多的优势,主要的优势在于:速度快、离线模式、版本控制,这篇文章主要介绍了yarn的安装及使用教程,需要的朋友可以参考下
    2022-08-08
  • 浅谈Node新版本13.2.0正式支持ES Modules特性

    浅谈Node新版本13.2.0正式支持ES Modules特性

    这篇文章主要介绍了浅谈Node新版本13.2.0正式支持ES Modules特性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解本地Node.js服务器作为api服务器的解决办法

    详解本地Node.js服务器作为api服务器的解决办法

    本篇文章主要介绍了详解本地Node.js服务器作为api服务器的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • npm dose not support Node.js v10.15.3的解决方法

    npm dose not support Node.js v10.15

    这篇文章主要给大家介绍了关npm dose not support Node.js v10.15.3的解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Node.js抓取中文网页乱码问题和解决方法

    Node.js抓取中文网页乱码问题和解决方法

    这篇文章主要介绍了Node.js抓取中文网页乱码问题和解决方法,本文讲解了使用一些开源库解决抓取中出现的乱码问题,需要的朋友可以参考下
    2015-02-02
  • Centos7 中安装 Node.js v4.4.4

    Centos7 中安装 Node.js v4.4.4

    我一直对学习Node.js比较感兴趣。这是一个Java平台的服务器端编程 ,它允许开发人员在服务器编写Java代码,并且有许多CentOS的用户正努力学习这个语言的开发环境。这正是我想做这个教程的目的。
    2016-11-11
  • 详解Node.Js如何处理post数据

    详解Node.Js如何处理post数据

    这篇文章给大家介绍了如何利用Node.Js处理post数据,文中通过实例和图文介绍的很详细,有需要的小伙伴们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • Node.js中使用mongoskin操作mongoDB实例

    Node.js中使用mongoskin操作mongoDB实例

    这篇文章主要介绍了Node.js中使用mongoskin操作mongoDB实例,Mongous是一个轻量级的nodejs mongodb驱动,需要的朋友可以参考下
    2014-09-09

最新评论