实战分享:利用nodejs​爬取并下载一万多张图片

本篇文章给大家分享一个node实战,看看作者是如何用 nodejs 爬了一万多张小姐姐壁纸的,希望对大家有所帮助! 哈喽,大家好,我是小马,为什么要下载这么多图片呢? 前几天使用 …

本篇文章给大家分享一个node实战,看看作者是如何用 nodejs 爬了一万多张小姐姐壁纸的,希望对大家有所帮助!

实战分享:利用nodejs​爬取并下载一万多张图片

哈喽,大家好,我是小马,为什么要下载这么多图片呢? 前几天使用 uni-app + uniCloud 免费部署了一个壁纸小程序,那么接下来就需要一些资源,给小程序填充内容。

爬取图片

首先初始化项目,并且安装axios和cheerio

npminit-y&&npmiaxioscheerio

axios用于爬取网页内容,cheerio是服务端的 jquery api, 我们用它来获取 dom 中的图片地址;

constaxios=require('axios')constcheerio=require('cheerio')functiongetImageUrl(target_url,containerEelment){letresult_list=[]constres=awaitaxios.get(target_url)consthtml=res.dataconst$=cheerio.load(html)constresult_list=[]$(containerEelment).each((element)=>{result_list.push($(element).find('img').attr('src'))})returnresult_list}

这样就可以获取到页面中的图片 url 了。接下来需要根据 url 下载图片。

如何使用 nodejs 下载文件

方式一:使用内置模块 ‘https’ 和 ‘fs’

使用nodejs下载文件可以使用内置包或第三方库完成。

GET 方法用于 HTTPS 来获取要下载的文件。createWriteStream()是一个用于创建可写流的方法,它只接收一个参数,即文件保存的位置。Pipe()是从可读流中读取数据并将其写入可写流的方法。

constfs=require('fs')consthttps=require('https')//URLoftheimageconsturl='GFG.jpeg'https.get(url,(res)=>{//Imagewillbestoredatthispathconstpath=`${__dirname}/files/img.jpeg`constfilePath=fs.createWriteStream(path)res.pipe(filePath)filePath.on('finish',()=>{filePath.close()console.log('DownloadCompleted')})})

方式二:DownloadHelper

npminstallnode-downloader-helper

下面是从网站下载图片的代码。一个对象 dl 是由类 DownloadHelper 创建的,它接收两个参数:

将要下载的图像。

下载后必须保存图像的路径。

File 变量包含将要下载的图像的 URL,filePath 变量包含将要保存文件的路径。

const{DownloaderHelper}=require('node-downloader-helper')//URLoftheimageconstfile='GFG.jpeg'//PathatwhichimagewillbedownloadedconstfilePath=`${__dirname}/files`constdl=newDownloaderHelper(file,filePath)dl.on('end',()=>console.log('DownloadCompleted'))dl.start()

方法三: 使用 download

是 npm 大神sindresorhus写的,非常好用

npminstalldownload

下面是从网站下载图片的代码。下载函数接收文件和文件路径。

constdownload=require('download')//Urloftheimageconstfile='GFG.jpeg'//PathatwhichimagewillgetdownloadedconstfilePath=`${__dirname}/files`download(file,filePath).then(()=>{console.log('DownloadCompleted')})最终代码

本来想去爬百度壁纸,但是清晰度不太够,而且还有水印等,后来, 群里有个小伙伴找到了一个 api,估计是某个手机 APP 上的高清壁纸,可以直接获得下载的 url,我就直接用了。

下面是完整代码

constdownload=require('download')constaxios=require('axios')letheaders={'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX11_1_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36',}functionsleep(time){returnnewPromise((reslove)=>setTimeout(reslove,time))}asyncfunctionload(skip=0){constdata=awaitaxios.get('http://service.picasso.adesk.com/v1/vertical/category/4e4d610cdf714d2966000000/vertical',{headers,params:{limit:30,//每页固定返回30条skip:skip,first:0,order:'hot',},}).then((res)=>{returnres.data.res.vertical}).catch((err)=>{console.log(err)})awaitdownloadFile(data)awaitsleep(3000)if(skip<1000){load(skip+30)}else{console.log('下载完成')}}asyncfunctiondownloadFile(data){for(letindex=0;index<data.length;index++){constitem=data[index]//PathatwhichimagewillgetdownloadedconstfilePath=`${__dirname}/美女`awaitdownload(item.wp,filePath,{filename:item.id+'.jpeg',headers,}).then(()=>{console.log(`Download${item.id}Completed`)return})}}load()

上面代码中先要设置User-Agent并且设置 3s 延迟, 这样可以防止服务端阻止爬虫,直接返回 403。

直接node index.js就会自动下载图片了。

实战分享:利用nodejs​爬取并下载一万多张图片实战分享:利用nodejs​爬取并下载一万多张图片

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/30771.html;
(0)
上一篇 2022年12月23日 下午4:18
下一篇 2022年12月23日 下午4:18

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部