本篇文章為大家展示了使用nodejs怎么批量下載圖片,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
睢縣網站建設公司創(chuàng)新互聯(lián)公司,睢縣網站設計制作,有大型網站制作公司豐富經驗。已為睢縣上1000家提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的睢縣做網站的公司定做!
1. 爬取圖片鏈接
因為之前也寫過nodejs爬蟲功能,所以覺得應該很簡單,就用cheerio來處理dom啦,結果打印一下啥也沒有,后來查看源代碼:

發(fā)現(xiàn)waterfall_zoom里面空空如也,查找了一下,發(fā)現(xiàn)所有的數(shù)據(jù)都是寫在<script>里面,然后動態(tài)加載到頁面的,所以用cheerio.load到的頁面里面其實沒數(shù)據(jù)的。真實數(shù)據(jù):

分析完畢,刷刷寫代碼:
var request = require('request');
var cheerio = require('cheerio');
var url = 'http://image.so.com/i?q=%E7%8C%AB&src=tab_www';
request(url,function(err,res,body){
if(!err && res.statusCode === 200){
var $ = cheerio.load(body);
var imgList = []
JSON.parse($('script[id="initData"]').html()).list.forEach(function(item){
imgList.push(item.img)
});
console.log(imgList);
}
});
2. 下載圖片到本地
2.1 粗糙的方案
最初的思路很簡單,簡單的fs.createWriteStream()就能解決:
var downloadPic = function(src, dest){
request(src).pipe(fs.createWriteStream(dest)).on('close',function(){
console.log('pic saved!')
})
}使用方式:
downloadPic(imgList[0],'./catpics/1.jpg');

成功捕獲一只貓!然后寫了一個循環(huán)準備捕獲所有貓。然而這種方式是串行的,速度很慢!下載一大批圖片要花大量時間。
2.2 使用async異步批量下載
關于async的map操作,詳見:async_demo/map.js,對集合中的每一個元素,執(zhí)行某個異步操作,得到結果。所有的結果將匯總到最終的callback里。與forEach的區(qū)別是,forEach只關心操作不管最后的值,而map關心的最后產生的值。
提供了兩種方式:
并行執(zhí)行。async.map同時對集合中所有元素進行操作,結果匯總到最終callback里。如果出錯,則立刻返回錯誤以及已經執(zhí)行完的任務的結果,未執(zhí)行完的占個空位
順序執(zhí)行。async.mapSeries對集合中的元素一個一個執(zhí)行操作,結果匯總到最終callback里。如果出錯,則立刻返回錯誤以及已經執(zhí)行完的結果,未執(zhí)行的被忽略。
在此處:
async.mapSeries(imgList,function(item, callback){
setTimeout(function(){
downloadPic(item, './catpics/'+ (new Date()).getTime() +'.jpg');
callback(null, item);
},400);
}, function(err, results){});注:此處使用setTimeout,是因為下載需要一定時間,在筆者較慢網速下,需要400ms的間隔能確保每張圖片下載完全。

成功捕獲一批貓貓!
2.3 使用bagpipe批量
bagpipe是樸靈大大做的一個在nodejs中控制并發(fā)執(zhí)行的模塊。其安裝和使用也比較簡單:
npm install bagpipe --save
使用:
var Bagpipe = require('bagpipe');
var bagpipe = new Bagpipe(10);
var files = ['這里有很多很多文件'];
for(vari =0; i < files.length; i++){
bagpipe.push(fs.readFile, files[i], 'utf-8',function(err, data){
...
});
}在此處:
var bagpipe = new Bagpipe(10,{timeout: 100});
for(var i = 0; i < imgList.length; i++) {
console.log('i:'+i)
bagpipe.push(downloadPic, imgList[i], './catpics/'+ i +'.jpg', function(err, data){
//
});
}上述內容就是使用nodejs怎么批量下載圖片,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標題名稱:使用nodejs怎么批量下載圖片
URL鏈接:http://chinadenli.net/article28/geeecp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設、網站設計公司、網站營銷、小程序開發(fā)、企業(yè)網站制作、網頁設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)