用node.js爬取网站上的图片,保存到本地

1.描述问题:
我做了一个小爬虫,想爬取某网站的一些图片,现在爬取下来了,图片路径是可以打印出来的。
但是,我需要将这些图片下载到本地一个images的文件夹下面,写的代码是没有问题的,我试过,如果该网站爬到的图片路径是正常的也就是http://....img这种形式的话,保存是没有问题的。
但是,问题就在于,很多网站上的图片地址都是base64这样的,我写的代码,会一直报错,我不知道该怎样解决。
2.代码贴图

clipboard.png
3.运行错误贴图
clipboard.png

阅读 5.1k
2 个回答
request(url, function (err, res, body) {
    if (!err && res.statusCode == 200) {
        var $ = cheerio.load(res.body.toString());
        $(".codelist").eq(0).children("a").each(function () {
            var listImgUrl = $(this).find("img").attr("src");
            links.push(listImgUrl)
        })
        
        async.mapSeries(links, function (item, callback) {
            let base64 = item.replace(/^data:image\/\w+;base64,/, ""); //去掉图片base64码前面部分data:image/png;base64
            let dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,
            //download(item, dir, Math.floor(Math.random() * 100000) + item.substr(-4, 4));
            fs.writeFile('./images/'+Math.floor(Math.random() * 100000) + item.substr(-4, 4)+'.jpg',dataBuffer,function(err){
                if(err){
                    console.log(err);
                }else{
                    console.log('写入成功!');
                }
            })
            callback(null, item)

        }, function (err, results) {});
    }

});

自己解决了,使用的是fs的writeFile的方法。亲测有效~
开心?

针对base64图片,你单独用把二进制数据写到文件,不要用stream