node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地

58 篇文章 16 订阅
57 篇文章 34 订阅

node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地

使用模块request、fs,request模块在npm里平均月下载量超过3000W次,那是相当的牛逼。

node版本8.0+,如果版本是8.0以下调用的时候就直接用promise。

封装

common.js
let request = require("request");
let fs = require("fs");

class Ut {
  /**
	 * 下载网络图片
	 * @param {object} opts 
	 */
  static downImg(opts = {}, path = '') {
    return new Promise((resolve, reject) => {
      request
        .get(opts)
        .on('response', (response) => {
          console.log("img type:", response.headers['content-type'])
        })
        .pipe(fs.createWriteStream(path))
        .on("error", (e) => {
          console.log("pipe error", e)
          resolve('');
        })
        .on("finish", () => {
          console.log("finish");
          resolve("ok");
        })
        .on("close", () => {
          console.log("close");
        })

    })
  };
}

module.exports = Ut;

测试普通网络图片

test.js 下载csdn自己的头像
let Ut = require("./common");

(async () => {
  try {
    let url = "http://avatar.csdn.net/1/A/1/3_zzwwjjdj1.jpg";
    let opts = {
      url: url,
    };
    let path = "./1.jpg";
    let r1 = await Ut.downImg(opts, path);
    console.log(r1);
  }
  catch (e) {
    console.log(e);
  }
})()

运行

node test.js


测试防盗链图片

http://i.meizitu.net/thumbs/2018/01/117406_24c17_236.jpg
let Ut = require("./common");

(async () => {
  try {
    let url = "http://i.meizitu.net/thumbs/2018/01/117406_24c17_236.jpg";
    let opts = {
      url: url,
    };
    let path = "./2.jpg";
    let r1 = await Ut.downImg(opts, path);
    console.log(r1);
  }
  catch (e) {
    console.log(e);
  }
})()
执行node  test.js得到的不是原图,原图是个妹子图片

这个时候就要分析原网站防盗链的方法,这个网站需要在头部加上 Referer:http://www.mzitu.com/
let Ut = require("./common");

(async () => {
  try {
    let url = "http://i.meizitu.net/thumbs/2018/01/117406_24c17_236.jpg";
    let opts = {
      url: url,
      headers: {
        'Referer': 'http://www.mzitu.com/',
      }
    };
    let path = "./2.jpg";
    let r1 = await Ut.downImg(opts, path);
    console.log(r1);
  }
  catch (e) {
    console.log(e);
  }
})()
再次运行node test.js 就会得到原图

完成。
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值