首页前端开发JavaScript实战分享:利用nodejs​爬取并下载一万多张图片

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

时间2024-01-31 08:17:03发布访客分类JavaScript浏览505
导读:收集整理的这篇文章主要介绍了实战分享:利用nodejs​爬取并下载一万多张图片,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家分享一个node实战,看看作者是如何用 nodejs 爬了一万多张小姐姐壁纸的,希望对大家有所帮助...
收集整理的这篇文章主要介绍了实战分享:利用nodejs​爬取并下载一万多张图片,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家分享一个node实战,看看作者是如何用 nodejs 爬了一万多张小姐姐壁纸的,希望对大家有所帮助!

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

爬取图片

首先初始化项目,并且安装 axioscheerio

npm inIT -y &
    &
     npm i axios cheerio

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

const axios = require('axios')const cheerio = require('cheerio')function getImageUrl(target_url, containerEelment) {
      let result_list = []  const res = await axios.get(target_url)  const htML = res.data  const $ = cheerio.load(html)  const result_list = []  $(containerEelment).each((element) =>
 {
    result_list.push($(element).find('img').attr('src'))  }
)  return result_list}
    

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

如何使用 nodejs 下载文件

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

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

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

const fs = require('fs')const https = require('https')// URL of the imageconst url = 'GFG.jpeg'https.get(url, (res) =>
 {
  // Image will be Stored at this path  const path = `${
__dirname}
    /files/img.jpeg`  const filePath = fs.createWriteStream(path)  res.pipe(filePath)  filePath.on('finish', () =>
 {
    filePath.close()    console.LOG('Download completed')  }
)}
    )

方式二:DownloadHelper

npm install node-downloader-helper

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

  1. 将要下载的图像。
  2. 下载后必须保存图像的路径。

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

const {
 DownloaderHelper }
 = require('node-downloader-helper')// URL of the imageconst file = 'GFG.jpeg'// Path at which image will be downloadedconst filePath = `${
__dirname}
    /files`const dl = new DownloaderHelper(file, filePath)dl.on('end', () =>
     console.log('Download Completed'))dl.start()

方法三: 使用 download

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

npm install download

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

const download = require('download')// Url of the imageconst file = 'GFG.jpeg'// Path at which image will get downloadedconst filePath = `${
__dirname}
    /files`download(file, filePath).then(() =>
 {
  console.log('Download Completed')}
    )

最终代码

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

下面是完整代码

const download = require('download')const axios = require('axios')let headers = {
      'User-Agent':    'mozilla/5.0 (Macintosh;
 Intel Mac OS X 11_1_0) Applewebkit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',}
function sleep(time) {
      return new PRomise((reslove) =>
 setTimeout(reslove, time))}
async function load(skip = 0) {
  const data = await axios    .get(      'http://service.picasso.adesk.COM/v1/vertical/category/4e4d610cDF714d2966000000/vertical',      {
        headers,        params: {
          limit: 30, // 每页固定返回30条          skip: skip,          First: 0,          order: 'hot',        }
,      }
        )    .then((res) =>
 {
      return res.data.res.vertical    }
    )    .catch((err) =>
 {
      console.log(err)    }
)  await downloadFile(data)  await sleep(3000)  if (skip  1000) {
    load(skip + 30)  }
 else {
    console.log('下载完成')  }
}
async function downloadFile(data) {
      for (let index = 0;
     index  data.length;
 index++) {
    const item = data[index]    // Path at which image will get downloaded    const filePath = `${
__dirname}
/美女`    await download(item.wp, filePath, {
      filename: item.id + '.jpeg',      headers,    }
    ).then(() =>
 {
      console.log(`Download ${
item.id}
 Completed`)      return    }
)  }
}
    load()

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

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

体验

微信小程序搜索 “西瓜图库” 体验。

https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?

更多node相关知识,请访问:nodejs 教程!

以上就是实战分享:利用nodejs​爬取并下载一万多张图片的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 浅析react18中的新概念Transitio...下一篇:爆肝归纳JavaScript学习知识点猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 实战分享:利用nodejs​爬取并下载一万多张图片
本文地址: https://pptw.com/jishu/593709.html
c++如何实现字符串分割函数split?(代码示例) 浅谈C#方法的六种参数

游客 回复需填写必要信息