在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 用node.js爬取網(wǎng)站上的圖片,保存到本地

用node.js爬取網(wǎng)站上的圖片,保存到本地

1.描述問題:
我做了一個小爬蟲,想爬取某網(wǎng)站的一些圖片,現(xiàn)在爬取下來了,圖片路徑是可以打印出來的。
但是,我需要將這些圖片下載到本地一個images的文件夾下面,寫的代碼是沒有問題的,我試過,如果該網(wǎng)站爬到的圖片路徑是正常的也就是http://....img這種形式的話,保存是沒有問題的。
但是,問題就在于,很多網(wǎng)站上的圖片地址都是base64這樣的,我寫的代碼,會一直報錯,我不知道該怎樣解決。
2.代碼貼圖

clipboard.png
3.運行錯誤貼圖
clipboard.png

回答
編輯回答
終相守

針對base64圖片,你單獨用把二進制數(shù)據(jù)寫到文件,不要用stream

2017年6月21日 10:12
編輯回答
貓小柒
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碼轉(zhuǎn)成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的方法。親測有效~
開心

2017年5月27日 13:59