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

  • u7_230255
    了解作者
  • 15.8KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-23 07:12
    上传日期
node.js实现爬虫批量下载图片 node_spider_download-img
Node.js-node.js实现爬虫批量下载图片.zip
  • node_spider_download-img-master
  • views
  • index.html
    821B
  • 参考文档.md
    5KB
  • app.js
    2.6KB
  • README.md
    5KB
  • .gitignore
    12B
  • package-lock.json
    33.3KB
  • package.json
    435B
内容介绍
# 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){%> <%})%> <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爬虫的升级打怪之路](http://developer.51cto.com/art/201711/557860.htm) + [手把手教你玩node——小玩node爬虫(获取百度新闻)express、superagent、cherrio](https://blog.csdn.net/baidu_38492440/article/details/78214412) + [Node.js 批量下载图片](https://blog.csdn.net/zhuming3834/article/details/78123701)
评论
    相关推荐
    • [Node.js] Node.js 实战 (英文版)
      Node.js in Action is an example-driven tutorial that starts at square one and guides you through all the features, techniques, and concepts you'll need to build production-quality Node applications....
    • node.cobol:用于COBOL的Node.js桥,可让您从COBOL运行Node.js代码
      用于COBOL的Node.js桥,可让您从COBOL运行Node.js代码。 您必须在计算机上安装 如果没有COBOL编译器,则可以通过运行以下命令进行安装: # Ubuntu sudo apt-get install open-cobol # OS X brew install gnu-...
    • [Node.js] Node.js the Right Way (英文版)
      [Packt Publishing] Node.js the Right Way Practical, Server-Side JavaScript That Scales (E-Book) ☆ 图书概要:☆ Get to the forefront of server-side JavaScript programming by writing compact, robust,...
    • c9couch:从Cloud9 IDE for Node.JS项目访问CouchDB Futon
      从Cloud9 IDE for Node.JS项目访问CouchDB Futon和CouchDB Fauxton Cloud9 IDE无法提供将Futon或Fauxton- Web管理界面访问CouchDB的方法。 该脚本除了将http请求转发到beddb之外,什么也不做。 与Futon合作很有...
    • Node.js-Passport.js
      Node.js和Passport.js身份验证 创建此存储库是为了说明如何使用Passport.js来实现Node.js应用程序 如果您要添加或更改某些内容,我将很高兴听到有关。 如何在本地运行 git clone cd Node.js-Passport.js 将.env....
    • Node.js-Tutorial:Node.js
      Node.js:教程 使用本教程作为学习Node.js的指南。 每个单元都包含带注释的课程,其中包含工作示例。 主题 介绍 大事记 溪流 文件系统操作 上载档案 模组 NPM 表示 快速路线 套接字 使用Redis持久化数据 建议的先决...
    • videogames-api-node.js:项目来展示我在node.js上的技能
      videogames-api-node.js 项目来展示我在node.js上的技能
    • [Node.js] Node.js 开发者指南 (英文版)
      Since it’s creation in 2009, Node.js has grown into a powerful and increasingly popular asynchronous-development framework for creating highly-scalable network applications using JavaScript....
    • node.js-videosite
      node.js 视频网站
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档