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

发布于 2022-09-07 11:56:53 字数 464 浏览 14 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慈悲佛祖 2022-09-14 11:56:53
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的方法。亲测有效~
开心?

椵侞 2022-09-14 11:56:53

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文