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

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

成都创新互联是专业的紫阳网站建设公司,紫阳接单;提供网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行紫阳网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

首先是依赖选择:

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 看运行结果。

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


本文标题:Node.js实现简单的爬取的示例代码
URL标题:http://hbruida.cn/article/pshopo.html