当前位置: 首页 > 后端技术 > Node.js

express+request实现-图芙在线爬取网页图片

时间:2023-04-03 10:07:47 Node.js

先献图芙地址:https://tufu.xkboke.comGIT开源地址:git地址(欢迎star)懒人驱动Idea有时在zcool或UI中国看到不错的图片还有工作想收藏学习,但是每次都要右键另存为很麻烦,有的还得放大才能下载原图;作为一个伪全栈,我怎么忍心?,然后就想着去扒一下他们网站的源码,发现原图存放的位置很有规律,很开心,哈哈!雏形诞生!!很快就完成了第一个小脚本,成功下载了需要的图片,不过只是最简单的图片爬取。后来优化了,每次下载的图片都放在不同的文件夹里。但是一转身,与其开心不如一个人,于是想着把这个脚本做成一个工具,做一个兼容多个网站的爬虫工具,可以批量下载原图。这个想法很快付诸实践。经过不断的修改,我的Tuf终于出了第一版。迭代优化一开始只支持Zakuo和UI中国,对其他网站的兼容性不是很好。没关系,先做第一个版本,然后慢慢迭代。后来根据反馈加了涂鸦王国,设计瘾,VisualME之类的网站,这几天一直在逛贴吧,发现贴吧的一些图也是很漂亮。可以做壁纸的图片有很多,但是下载到原图需要三四步,而且一次只能下载一张,那又如何呢?,我再次将它添加到我的Tuf工具中,哈哈!我的凝灰岩又在慢慢长大了!先放一张图展示下我的Tuf技术栈。其实道理大家都懂。它是一个爬虫。只是我把爬虫的可视化做成了一个日常使用的工具。这里主要用到了express,用到了library。是request,compressing用于压缩文件夹,node-uuid用于生成随机hash;代码index.js放一个目录结构部分主要是请求文件,其他文件移到git查看constpath=require('path');constfs=require('fs');constanalyze=require('./analyze');consttarTool=require('./tarTool')constuuid=require('node-uuid')/***根据使用哈希值创建文件夹*@parampath*/functionwrite(path){fs.exists(path,function(exists){//path为文件夹路径if(!exists){fs.mkdir(path,function(err)){if(err){console.log('Createfailed');returnfalse;}else{console.log('创建成功');}})}})}/***请求图片URL*@paramresponse*@paramreq*@paramnext*/functionstart(req,response,next){consthash=uuid.v1().replace(/-/g,"")constimgDir=path.join(path.resolve(__dirname,'..'),'output/img/'+hash);write(imgDir)//发起获取DOM的请求console.log('requestaddress',req.url);request(req.url,function(err,res,body){if(!err&&res){console.log('start');//将downLoad函数作为参数传递给分析模块analyze的findImg方法.findImg(body,req.type,imgDir,downLoad,req.url);response.json({head:{code:0,msg:'ok'},data:hash})}else{response.json({head:{code:1000,msg:err},data:''})}});}/***得到findImg函数返回的图片地址后,再次使用request发起请求,将数据写入本地**@param{*}imgUrl*@param{*}i*@param{*}imgDir*/functiondownLoad(imgUrl,i,imgDir){console.log('图片地址',imgUrl);让ext=imgUrl.split('.').pop();//再次发起请求,写入文件request(imgUrl).pipe(fs.createWriteStream(path.join(imgDir,i+'.'+ext),{'encoding':'utf8',}));}/***图片下载到本地后,使用tar压缩成压缩包,返回路径*@param{*}req*@param{*}response*@param{*}next*/functiontarFile(req,response,next){console.log('receive',req);tarTool.tarTool(req.path,response)}module.exports={getImg:start,tarTool:tarFile}使用当然,既然是工具,方法肯定很简单。你只需要复制你要下载的页面的网址链接,然后粘贴到我的输入框里,然后选择网站类型(当然我会悄悄告诉你,不选也没关系,我查了一下),然后点击搜索,然后耐心等待...加载中....(因为服务器带宽只有1M,所以下载会有点慢。我不介意,哈哈),执行完成后会出现一个下载按钮,只需要点击下载即可下载打包后的文件。已支持网站站CoolUI中国涂鸦王国DesignObsessionVisualME百度贴吧...(静候您的意见)声明本工具仅作为技术交流工具使用,不得用于任何商业目的或盈利。本网站不存储任何图片,所有内容均通过爬虫工具对网页上已有的内容进行爬取。任何通过本网站下载的图片并不代表您拥有用于商业用途的权利或授权。如需授权或商业使用,请联系原网站作者或平台,感谢您的理解!最后附上我的开源GIT地址:https://github.com/gengchen52...图府网站地址:https://tufu.xkboke.com喜欢的话请给个star,有什么想法大家可以提issue,也可以微信联系我,欢迎交流,也可以在评论留下你想收藏的网站链接。我会不时更新完全由图府支持的网站。1)使用node脚本自动删除豆瓣评论和帖子(这个最近更新中,也会提供可视化操作,敬请期待)【基于mongodb+express+vue+的掘金热文合集和评论分析axios+bootstrap](https://juejin.im/post/5a1293...个人博客:www.xkboke.com