nodejs制作爬虫实现批量下载图片
发布时间 - 2026-01-11 01:10:36 点击率:次今天想获取一大批猫的图片,然后就在360流浪器搜索框中输入 猫 ,然后点击图片。就看到了一大波猫的图片: http://image.so.com/i?q=%E7%8... ,我在想啊,要是审查元素,一张张手动下载,多麻烦,所以打算写程序来实现。不写不知道,一写发现里面还是有很多道道的。
1. 爬取图片链接
因为之前也写过nodejs爬虫功能(参见:NodeJS制作爬虫全过程 ),所以觉得应该很简单,就用cheerio来处理dom啦,结果打印一下啥也没有,后来查看源代码:
发现 waterfall_zoom 里面空空如也,查找了一下,发现所有的数据都是写在 <script> 里面,然后动态加载到页面的,所以用cheerio.load到的页面里面其实没数据的。真实数据:
分析完毕,刷刷写代码:
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');
成功捕获一只猫!然后写了一个循环准备捕获所有猫。然而这种方式是串行的,速度很慢!下载一大批图片要花大量时间。
2.2 使用async异步批量下载
关于async的map操作,详见: async_demo/map.js ,对集合中的每一个元素,执行某个异步操作,得到结果。所有的结果将汇总到最终的callback里。与forEach的区别是,forEach只关心操作不管最后的值,而map关心的最后产生的值。
提供了两种方式:
并行执行。 async.map 同时对集合中所有元素进行操作,结果汇总到最终callback里。如果出错,则立刻返回错误以及已经执行完的任务的结果,未执行完的占个空位
顺序执行。 async.mapSeries 对集合中的元素一个一个执行操作,结果汇总到最终callback里。如果出错,则立刻返回错误以及已经执行完的结果,未执行的被忽略。
在此处:
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中控制并发执行的模块。其安装和使用也比较简单:
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){
//
});
}
3.总结
作为一个程序员,能用程序解决就不手动解决。每一次尝都会有新的收获。
# nodejs实现爬虫
# nodejs实现网络爬虫
# nodejs
# 爬虫
# nodejs批量下载图片的实现方法
# node.js读取Excel数据(下载图片)的方法示例
# 详解node.js 下载图片的 2 种方式
# angular.js+node.js实现下载图片处理详解
# 利用Node.js批量抓取高清妹子图片实例教程
# Node.js批量给图片加水印的方法
# Node.js读写文件之批量替换图片的实现方法
# 用Node.js通过sitemap.xml批量抓取美女图片
# Node.js实现批量下载图片简单操作示例
# 有很多
# 很简单
# 大波
# 都是
# 会有
# 是因为
# 我在
# 就在
# 就能
# 就不
# 两种
# 空空如也
# 找了
# 写了
# 作为一个
# 就看
# 就用
# 来实现
# 写在
# 要花
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python图片处理进阶教程_Pillow滤镜与图像增强
如何正确选择百度移动适配建站域名?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel如何记录自定义日志?(Log频道配置)
iOS发送验证码倒计时应用
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何自定义建站之星网站的导航菜单样式?
如何快速登录WAP自助建站平台?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
JavaScript如何操作视频_媒体API怎么控制播放
郑州企业网站制作公司,郑州招聘网站有哪些?
Linux系统命令中screen命令详解
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel怎么使用artisan命令缓存配置和视图
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何快速辨别茅台真假?关键步骤解析
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Laravel如何使用Telescope进行调试?(安装和使用教程)
LinuxShell函数封装方法_脚本复用设计思路【教程】
海南网站制作公司有哪些,海口网是哪家的?
如何在Tomcat中配置并部署网站项目?
如何快速搭建支持数据库操作的智能建站平台?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Laravel如何集成Inertia.js与Vue/React?(安装配置)
利用 Google AI 进行 YouTube 视频 SEO 描述优化
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
微信小程序 配置文件详细介绍
JavaScript数据类型有哪些_如何准确判断一个变量的类型
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
网站制作软件有哪些,制图软件有哪些?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
php结合redis实现高并发下的抢购、秒杀功能的实例
香港服务器租用费用高吗?如何避免常见误区?
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Linux系统运维自动化项目教程_Ansible批量管理实战
三星网站视频制作教程下载,三星w23网页如何全屏?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
黑客如何通过漏洞一步步攻陷网站服务器?
如何在建站主机中优化服务器配置?
Python3.6正式版新特性预览
Laravel如何自定义分页视图?(Pagination示例)
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
焦点电影公司作品,电影焦点结局是什么?

