node批量下载图片
来源:互联网 发布:thinkphp cms教程 编辑:程序博客网 时间:2024/05/01 12:45
最近想做一个图片管理的webApp,当然就需要大量图片了,想着干脆用脚本批量下载吧,搜了一下node相关的资料,以下是参考网上的资料以所写的:
var fs = require('fs');var request = require('request');var cheerio = require('cheerio');var mkdirp = require('mkdirp');var url = 'http://image.baidu.com/';var dir = './image';mkdirp(dir, function(err) { if (err){ console.log(err); }});request(url, function(error, response, body) { if (!error && response.statusCode == 200) { var imgArr = []; var num = 0; var src = ""; var imgRegex = /http:\/\/[\w\.\/%=-_]+(jpg|png|gif|bmp)/gim; //以下针对直接用img标签添加的图片 var $ = cheerio.load(body); //用cheerio来解析dom $('img').each(function(){ //$(xxx)内部的规则xxx可根据实际情况修改 src = $(this).attr("src"); //若src为相对路径 /xxx/xxx.jpg的形式,则加上域名(根目录) if(!src.match(/^http/)){ src = /http:\/\/[\w\.]+/.exec(url)[0] + src; } imgArr.push(src); }); //以下针对通过js动态添加的图片,如百度图片 while((src = imgRegex.exec(body)) !== null) { imgArr.push(src[0]); } // 数组去重 imgArr.sort(); for(var j = 0;j < imgArr.length;j++){ if(imgArr[j+1] == imgArr[j]){ imgArr.splice(j+1,1); j--; } } //开始下载 for(var i = 0; i < imgArr.length; i++){ request({ url: imgArr[i], timeout: 1000 * 3600}) .on('error', function(err) { console.log(err); }) .pipe(fs.createWriteStream(dir +"/"+ (num++) + imgArr[i].substr(-4,4))); console.log('已下载:', imgArr[i]); } }});
以上代码均已测试可用。。。但是具体情况可能有些许bug。。比如如果下载百度图片页面(通过js动态添加的),因为页面数据较多,如果网络环境不是很好的话,会出现timeout的error,导致部分图片无法正常下载(但是。。经测试,若网络环境较好,则不会出现上述bug…ORZ…)
0 0
- node批量下载图片
- Node.js 批量下载图片
- node.js爬虫之下载图片,批量下载图片,控制下载图片并行上限
- node.js 批量下载css文件里的图片
- Python批量下载图片
- 批量下载大量图片
- php 图片批量下载
- 怎么批量下载图片
- python批量下载图片
- python 批量下载图片
- Python3 批量下载图片
- Python批量下载图片
- 网页批量下载图片
- python下载批量图片
- python批量下载图片
- 批量下载凡客诚品的图片
- android 批量下载图片 bug
- PYthon 批量下载网页图片
- iOS开发之如何获取各种控件的输入值
- Codeforces Round #285 (Div. 2) C. Misha and Forest 构造
- Java 正则 , 截取两个标签之间字符串
- 一道典型的DP题
- s:a 标签的正确写法
- node批量下载图片
- [JQuery] jquery.fn.extend 与 jquery.extend
- HTTP Header
- ECharts——纯Javascript的图表库
- 2xx、200、201、202、203、204、205、206 状态码详解
- 深入掌握JMS(七):DeliveryMode例子
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
- AWS EC2 调整云主机根卷大小
- js Unicode编码转换