CNode

爬虫下载图片的问题

问答
TThinkCats发布于12 年前最后回复12 年前2 回复4648 浏览0 收藏

写一个爬虫,当只下载比较少的图片时候,一切正常,当下载比较多的图片的时候,会报错。我这里试了两种方式,都会出问题。 1.采用child_process,调用系统的curl下载图片。 代码: var curl=cp.spawn('curl',[file_url]); curl.stdout.on('data',function(data){ file.write(data); }); curl.stdout.on('end',function(data){ file.end(); console.log(filename+'download to'+DOWNLOAD_DIR); }); 这里省去了on('error')和on('exit') 。最终只能下载几个图片,很多都是失败的,然后报错。 这个报的错误是这样: Error: spawn EMFILE at errnoException (child_process.js:988:11) at ChildProcess.spawn (child_process.js:935:11) at Object.exports.spawn (child_process.js:723:9)

2.所以又采用第二种方式,用http来get这些图片。 var filename=url.parse(file_url).pathname.split('/').pop(); var file=fs.createWriteStream(DOWNLOAD_DIR+filename); http.get(file_url,function(res){ res.on('data',function(data){ file.write(data); }); res.on('end',function(data){ file.end(); }); res.on('error',function(e){ if(e){ console.log('Errored:'+e); file.end(); }else{ console.log('Finish'); } }); }); 这样的效果更不好,也报错了,报的错误是: read econnreset 请教各位,当下载很多图片的时候,要怎么处理呢?

查看回复

回复 (2)

M
magicdawn#1·12 年前

限制并发用 async.parallelLimit https://github.com/caolan/async#parallellimittasks-limit-callback

不知道Promise有没有 parallelLimit

T
ThinkCats#2·12 年前
引用 magicdawn限制并发用 async.parallelLimit https://github.com/caolan/async parallellimittasks limit callback 不知道P...

@magicdawn 的确应该是这个并发的原因 我代码里面是没一点限制的

参与回复
登录后即可参与回复。登录