down.js
/** * node 爬虫 */ var fs = require('fs'); var request = require("request"); var cheerio = require("cheerio"); var async = require('async'); // 本地存储目录 var dir = './images'; // 并发数 var asyncNum = 5; // 下载图片 function downloadImg(photos, dir, asyncNum) { console.log("即将异步并发下载图片,当前并发数为:" + asyncNum); async.mapLimit(photos, asyncNum, function (photo, callback) { var filename = photo.substr(-5, 5); if (filename) { console.log('正在下载' + photo); // 默认 // fs.createWriteStream(dir + "/" + filename) // 防止pipe错误 request(photo) .on('error', function (err) { console.log(err); }) .pipe(fs.createWriteStream(dir + "/" + filename)); console.log('下载完成'); callback(null, filename); } }, function (err, result) { if (err) { console.log(err); } else { console.log(" all right ! "); console.log(result); } }) } var originUrl = 'http://mhpic.mh51.com/comic/Y/%E9%A9%AD%E7%81%B5%E5%B8%88/3-6%E8%AF%9D/1.jpg'; var sum = 10; var photos = []; for (var i = 1; i <= sum; i++) { var url = originUrl.substring(0, originUrl.length - 5); photos.push(url + i + '.jpg'); } photos.forEach((url, idx) => { let filename = url.split('/').pop(); // 已原网络图片的名称命名本地图片 // request({ url }).pipe( // fs.createWriteStream(`./images/${filename}`).on('close', err => { console.log('写入失败', err) }) // ) request.get({ uri: url, encoding: 'binary' }, function (err, res) { if (!err) { fs.writeFile(`./images/${filename}`, res.body, "binary", function (err, res) { if (!err) { // } else { console.log(err); } }) } }) }) // downloadImg(photos, dir, asyncNum)
.