久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

使用nodejs怎么批量下載圖片

本篇文章為大家展示了使用nodejs怎么批量下載圖片,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

睢縣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,睢縣網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為睢縣上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的睢縣做網(wǎng)站的公司定做!

1. 爬取圖片鏈接

因?yàn)橹耙矊戇^nodejs爬蟲功能,所以覺得應(yīng)該很簡(jiǎn)單,就用cheerio來處理dom啦,結(jié)果打印一下啥也沒有,后來查看源代碼:

使用nodejs怎么批量下載圖片

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

使用nodejs怎么批量下載圖片

分析完畢,刷刷寫代碼:

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);
  }
});

使用nodejs怎么批量下載圖片

2. 下載圖片到本地

2.1 粗糙的方案

最初的思路很簡(jiǎn)單,簡(jiǎn)單的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');

 使用nodejs怎么批量下載圖片

成功捕獲一只貓!然后寫了一個(gè)循環(huán)準(zhǔn)備捕獲所有貓。然而這種方式是串行的,速度很慢!下載一大批圖片要花大量時(shí)間。

2.2 使用async異步批量下載

關(guān)于async的map操作,詳見:async_demo/map.js,對(duì)集合中的每一個(gè)元素,執(zhí)行某個(gè)異步操作,得到結(jié)果。所有的結(jié)果將匯總到最終的callback里。與forEach的區(qū)別是,forEach只關(guān)心操作不管最后的值,而map關(guān)心的最后產(chǎn)生的值。

提供了兩種方式:

  1. 并行執(zhí)行。async.map同時(shí)對(duì)集合中所有元素進(jìn)行操作,結(jié)果匯總到最終callback里。如果出錯(cuò),則立刻返回錯(cuò)誤以及已經(jīng)執(zhí)行完的任務(wù)的結(jié)果,未執(zhí)行完的占個(gè)空位

  2. 順序執(zhí)行。async.mapSeries對(duì)集合中的元素一個(gè)一個(gè)執(zhí)行操作,結(jié)果匯總到最終callback里。如果出錯(cuò),則立刻返回錯(cuò)誤以及已經(jīng)執(zhí)行完的結(jié)果,未執(zhí)行的被忽略。

在此處:

async.mapSeries(imgList,function(item, callback){
  setTimeout(function(){
    downloadPic(item, './catpics/'+ (new Date()).getTime() +'.jpg');
    callback(null, item);
  },400);
}, function(err, results){});

注:此處使用setTimeout,是因?yàn)橄螺d需要一定時(shí)間,在筆者較慢網(wǎng)速下,需要400ms的間隔能確保每張圖片下載完全。

 使用nodejs怎么批量下載圖片

成功捕獲一批貓貓!

2.3 使用bagpipe批量

bagpipe是樸靈大大做的一個(gè)在nodejs中控制并發(fā)執(zhí)行的模塊。其安裝和使用也比較簡(jiǎn)單:

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){
    //
   });
}

上述內(nèi)容就是使用nodejs怎么批量下載圖片,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:使用nodejs怎么批量下載圖片
URL鏈接:http://sd-ha.com/article28/geeecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)公司、網(wǎng)站營(yíng)銷小程序開發(fā)、企業(yè)網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站