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

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

实战分享:利用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 创建的,它接收两个参数:

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

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

存了个图 存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17 查看详情 存了个图

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  {      console.log(`Download ${item.id} Completed`)      return    })  }}load()

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

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

1.png2.png

体验

微信小程序搜索 “西瓜图库” 体验。https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/552370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 20:41:05
下一篇 2025年11月9日 20:42:40

相关推荐

  • 使用PhpStorm进行TypeScript开发的步骤

    phpstorm支持typescript开发,需配置环境并安装相关工具。1. 安装node.js并检查版本;2. 通过npm安装typescript,推荐本地安装以便项目独立管理;3. 在phpstorm中开启typescript支持并选择正确版本;4. 创建tsconfig.json文件以配置编译…

    2025年12月5日 后端开发
    000
  • 一键PHP环境可以运行Nodejs项目吗_Nodejs环境兼容性

    一键PHP环境不支持Node.js项目,需单独安装Node.js并配置反向代理实现服务协同。 一键PHP环境通常是指集成了Apache/Nginx、MySQL、PHP等组件的集成环境,比如WAMP、XAMPP、PHPStudy等。这类环境主要针对PHP项目设计,默认情况下并不包含Node.js运行时…

    2025年12月4日
    000
  • VSCode怎么用NodeJS联想_VSCode配置NodeJS智能提示与补全教程

    答案:要让VSCode中Node.js代码拥有智能提示和自动补全,需确保项目包含package.json、配置jsconfig.json文件、正确安装第三方库及其@types类型定义。首先通过npm init -y创建package.json,再安装依赖如express,并用npm install …

    2025年12月3日
    000
  • 如何使用 GraalVM 本地编译 Java 无服务器应用程序?

    使用 graalvm 本地编译 java 无服务器函数:安装 graalvm。使用 aws lambda 设置无服务器框架。编写 java 代码。使用 native-image 命令编译 java 代码。部署本机可执行文件到 lambda。配置函数使用本机可执行文件,并设置 graalvm_home…

    2025年12月2日 java
    000
  • Serverless Framework vs. Java 框架:哪种更适合无服务器应用程序?

    对于无服务器应用程序,serverless framework 提供了简易部署、跨平台兼容性和自动扩展等优点,适用于优先考虑易用性和可伸缩性的场景。而 java 框架则提供了灵活性、高性能和广泛的社区支持,适用于需要定制架构、高性能处理和 java 生态系统支持的情况。 Serverless Fra…

    2025年12月2日 java
    000
  • CSS怎样实现数据标签云—随机大小颜色方案

    实现带有随机大小和颜色的css标签云,核心在于使用javascript生成随机数值并将其应用到html元素的样式上。1. html提供标签结构;2. javascript生成随机字体大小和颜色,并注入到每个标签的style属性中;3. css负责基础样式和过渡效果渲染。通过结合html、css与ja…

    2025年12月2日 web前端
    000
  • 关于NodeJs如何使用Mysql模块实现事务处理实例

    本篇文章主要介绍了nodejs使用mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 依赖模块: 1. mysql npm install mysql –save 2. async npm install async –save (ps: a…

    数据库 2025年12月2日
    000
  • perplexity怎么安装电脑版_perplexity电脑版安装教程

    可通过浏览器将Perplexity网站添加到桌面实现应用化,或使用Electron技术打包为独立程序,还可借助WebApp.io等第三方平台生成安装包,三种方法均能高效在电脑端使用Perplexity。 如果您希望在电脑上使用Perplexity以获得更高效的搜索和问答体验,可以通过多种方式实现。由…

    2025年12月1日 软件教程
    000
  • App Engine 模块:独立代码库与多运行时配置详解

    app engine 模块允许开发者为同一应用部署独立的 go 代码库,并支持配置不同的运行时环境。这一范式打破了传统上认为所有模块必须共享同一代码库的限制,极大地增强了应用的灵活性和可扩展性。通过为每个模块指定独立的配置文件和根目录,开发者可以构建微服务架构,充分利用不同语言的优势,从而优化应用性…

    2025年12月1日 后端开发
    000
  • Google App Engine Go 模块:独立代码库与多运行时支持

    Google App Engine(GAE)的模块化设计允许开发者为每个服务(模块)使用独立的源代码库,并支持配置不同的运行时环境。这一特性打破了传统应用共享单一代码库的限制,极大地增强了应用的灵活性、可维护性,并使得在同一应用中集成多种编程语言和技术栈成为可能,从而优化了特定任务的执行效率。 Ap…

    2025年12月1日 后端开发
    000
  • Google App Engine 模块化部署:突破单一代码库限制

    本文旨在澄清google app engine go模块是否必须共享同一代码库的常见误解。我们将深入探讨app engine模块化架构,阐明每个模块不仅可以拥有独立的运行时环境,还能维护各自的代码库。这极大地提升了应用设计的灵活性,允许开发者在同一应用中融合多种语言和技术栈,从而充分利用各语言的优势…

    2025年12月1日 后端开发
    000
  • GAE跨服务任务提交策略:从Python服务调度Node.js任务

    本文详细阐述了在Google App Engine (GAE) 环境中,如何实现从一个服务(如Python)提交任务,并由另一个服务(如Node.js)执行的策略。核心方法包括:利用dispatch.yaml配置基于URL路径的任务路由,使relative_uri直接指向目标服务;或采用间接方式,通…

    2025年11月29日 后端开发
    000
  • 如何在Linux上使用Swagger优化API设计

    本文介绍如何在Linux系统中利用Swagger提升API设计的效率和质量。我们将逐步讲解Swagger Editor、Swagger UI的安装和配置,以及在Spring Boot项目中集成Swagger的方法,并演示如何使用Swagger注解定义API文档,最终在IntelliJ IDEA中利用…

    2025年11月29日 系统教程
    000
  • Linux Node.js日志轮转策略怎样配置

    本文介绍两种在Linux系统中实现Node.js应用日志轮转的策略。 方法一:利用logrotate工具 logrotate是Linux系统自带的日志管理工具,可用于日志文件的轮转、压缩和删除。 安装logrotate(若未安装): sudo apt-get install logrotate # …

    2025年11月29日 系统教程
    000
  • 如何清理Node.js日志文件

    Node.js日志文件的清理方法多种多样,您可以根据实际情况选择最合适的方式: 方法一:手动删除 最直接的方法是手动删除日志文件。通常,日志文件存储在项目根目录下的logs文件夹中。您可以使用文件管理器或命令行工具找到并删除这些文件。 方法二:使用rm命令 在命令行中,进入日志文件所在的目录,然后使…

    2025年11月29日 系统教程
    000
  • 如何在Node.js程序中重连MySQL连接?

    如何在node.js程序中重连mysql连接? MySQL是一种流行的关系型数据库,而Node.js是一种非常流行的服务器端编程语言。将两者结合使用是很常见的,在Node.js程序中连接到MySQL数据库可以让我们对数据进行操作、存储和检索。然而,有时候MySQL连接可能会由于各种原因断开,这时我们…

    数据库 2025年11月29日
    000
  • Node.js 版本升级中 node-gyp 错误排查与 Yarn 解决方案

    在将 Node.js 版本升级至 20.9.0 等新版本时,开发者常遇到 `node-gyp` 编译原生模块的错误,尤其表现为 Python 环境配置不当或网络下载 Node.js 头文件失败。本文将深入分析这些错误的原因,提供 Python 和构建工具的排查方法,并重点介绍如何通过切换到 Yarn…

    2025年11月29日 后端开发
    000
  • 我参加了全栈训练营课程

    我做了什么! 我最近浏览了一个新手训练营的两小时视频,其中我构建并部署了一个全栈应用程序。 我只花了六个小时…… 这是我的一些收获。 内联 css 的正确模式和约定很困难。未考虑重构。使用 node server 来推送 react build 很尴尬。没有单元测试。部署是一…

    2025年11月28日 web前端
    000
  • 变更集中的 Nodejs util 模块用法

    您将在 changesets 源代码中的第 4 行找到导入内容 import { format } from “util”; 本文概述了 util 模块及其在变更集中的用法。 实用模块 util模块主要是为了支持node.js自己的内部api的需求而设计的。然而,许多实用程序对于应用程序和模块开发人…

    2025年11月28日 web前端
    000
  • JavaScript 使用 Nodejs 并访问和修改 phpMyAdmin 数据库

    嗨, 我是新手,以前从未这样做过。 简单来说,我有一个 C# 语言的 Visual Studio Windows 窗体应用程序,需要许可功能。 当用户点击“购买”按钮时会打开网站,付款成功后会重定向到某个网页网址。 我想使用 JavaScript 来完成一些任务。 立即学习“PHP免费学习笔记(深入…

    2025年11月28日
    000

发表回复

登录后才能评论
关注微信