node爬取图片并保存到本地(重要是保存)

最近有个想法是抓取批量的验证码图片来做个验证码识别功能,所以想用node写个抓取图片的小脚本,看上去简单,问题还真不少

直接上经过探索之后可行的代码,ajax请求这块用了axios,因为习惯

const axios = require('axios')
const fs = require('fs')

fs.readdir('./', (err, files) => {  //创建本地文件夹
  if (!files.includes('saveImage')) {
    fs.mkdir('./saveImage', (err) => {
      if (err) {
          throw err;
        }
        console.log("已创建图片文件夹")
      }
    )
  }
})

http.get('http://pic.ibaotu.com/homeSp/20191028/5db64b54da73a.jpg', function(res){
    var imgData = "";
    res.setEncoding("binary"); //一定要设置response的编码为binary否则会下载下来的图片打不开
    res.on("data", function(chunk){ //这步是我百度来的。。。。
        imgData+=chunk;
    });

    res.on("end", function(){
        fs.writeFile("./saveImage/age.jpg", imgData, "binary", function(err){
            if(err){
                console.log("down fail");
            }
            console.log("down success");
        });
    });
});

我之前的错误:

以为返回来的图片是base64格式的,因为返回来打印出的乱码,我理所当然的认为这是base64的(不然啥有那么一大坨乱码?),结果不是

看下我错误的做法:
axios.get('https://pic.ibaotu.com/homeSp/20191028/5db64b54da73a.jpg').then( res => {
  var imageData = Buffer.from(res.data.replace(/^data:image\/\w+;base64,/, ""), 'base64')
  console.log(imageData)
  fs.writeFile(`./saveImage/age.jpg`,imageData, (error) => {
    if (error) {
        console.log('下载失败');
    } else {
        console.log('下载成功!')
    }
  })
})

用这种方法显然打不开,貌似一定要二进制格式?还是得继续学习下相关知识才行

你可能感兴趣的:(node,node)