node.js实现爬虫批量下载图片

node.js实现爬虫批量下载图片 node_spider_download-img 创建文件夹

这里我们先新建一个文件夹(这里我在我的D盘新建了demo)

初始化项目

根目录下npm init,这时会要求我们输入一些信息,一些文件的信息,按照个人填写.记住entry point填写app.js其它随便,确定后输入yes

安装模块 (或者直接下载我的项目 然后npm install即可)

最好一开始全局安装了nrm 使用淘宝镜像

最常用的express,这里爬虫我们还要用到superagent,cheerio 在命令行中执行 npm install express superagent cheerio async;后面加--save可以写入package.json

安装成功会生成node_modules文件夹

此时如果没有报错的话,就是安装成功了,这时候会发现文件夹里多了些东西。这时候就可以正式的编写代码了。

编写服务器代码

这demo文件夹下面创建文件app.js,代码如下

var ejs=require("ejs"); var path = require('path'); var logger = require('morgan'); var bodyParser = require('body-parser'); var request = require('request'); var fs = require('fs'); var express=require('express');//引入模块 var cheerio=require('cheerio'); var superagent=require('superagent'); var async = require("async");//处理异步 var app=express(); // ejs页面 app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'html'); app.engine('html',ejs.__express); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(__dirname, 'public'))); // 存放爬到的数据 的数组 var arr=[]; app.get('/',function(req,res,next){ superagent.get('http://www.123rf.com.cn/%E5%85%8D%E7%89%88%E7%A8%8E%E5%9B%BE%E7%89%87/%E8%81%9A%E4%BC%9A.html')//请求页面地址 .end(function(err,sres){//页面获取到的数据 if(err) return next(err); console.log(sres.text,999) var $=cheerio.load(sres.text);//用cheerio解析页面数据 // 下面就是通过cheerio去找html网页中的数据,并存放到arr中 $(".searchpage-gallery .gallery-item-thumb-content").each(function(index,element){ console.log(element) var $eleItem=$(element).find('.uitooltip'); arr.push( { href: $eleItem.attr('src'), filename:$eleItem.attr('filename') } ); }); console.log(arr) // 通过ejs 返回给前台页面 res.render('index',{arr:arr}); }) }); // 对应前台页面的下载功能 app.get('/download.do',function(req,res){ let results=arr.splice(0,90) async.each(results,function iteratee(item, callback){ // 获取图片地址 var urls = item.href; // 获取图片名字 var objName = item.filename+'.jpg'; console.log(urls,999) // 构建目标路径,到项目根目录下新建uploads文件夹,用来存放下载的图片 var basePath = './uploads/'; var targetPath = basePath+ "/tmp"; // 下载图片 download(urls,basePath, objName); }) }) // 图片下载函数 // uri:图片网络地址 // dir:目标路径 // filename:图片名字 function download(uri, dir,filename){ request.head(uri, function(err, res, body){ request(uri).pipe(fs.createWriteStream(dir + "/" + filename)); }); }; app.listen(8888, function () { console.log('抓取成功~~~'); }); 项目根目录新建views,uploads这两个文件夹 并在views目录下新建index.html页面 编写前台页面下载功能index.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <button onclick="download()">下载</button> <%arr.forEach(function(item){%> <img src="<%-item.href%>" alt=""> <%})%> <script src='https://cdn.bootcss.com/jquery/2.0.0/jquery.js'></script> <script> // 点击按钮 发起ajax请求,实现下载功能 function download(){ $.ajax({ url:'download.do', type:'get', data:{a:1}, success:function(result){ console.log(arr) } }) } </script> </body> </html> 运行项目

根目录下 node app.js 。推荐使用supervisor 进程管理

访问

打开浏览器 输入localhost:8888

参考

一只node爬虫的升级打怪之路

手把手教你玩node——小玩node爬虫(获取百度新闻)express、superagent、cherrio

Node.js 批量下载图片

版权声明:

1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。
2、网站不提供资料下载,如需下载请到原作者页面进行下载。