node.js实现爬虫批量下载图片
初始化项目这里我们先新建一个文件夹(这里我在我的D盘新建了demo)
安装模块 (或者直接下载我的项目 然后npm install即可)根目录下npm init,这时会要求我们输入一些信息,一些文件的信息,按照个人填写.记住entry point填写app.js其它随便,确定后输入yes
安装成功会生成node_modules文件夹最好一开始全局安装了nrm 使用淘宝镜像
最常用的express,这里爬虫我们还要用到superagent,cheerio 在命令行中执行 npm install express superagent cheerio async;后面加--save可以写入package.json
编写服务器代码此时如果没有报错的话,就是安装成功了,这时候会发现文件夹里多了些东西。这时候就可以正式的编写代码了。
这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、网站不提供资料下载,如需下载请到原作者页面进行下载。