• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 实战分享:利用nodejs​爬取并下载一万多张图片

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了nodejs​爬取图片,nodejs爬虫等相关知识,希望对您有所帮助

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


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


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

爬取图片

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

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 变量包含将要保存文件的路径。

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 就会自动下载图片了。


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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2022-04-29js实现wordpress文章复制自动加版权信息
  • 2022-04-29Photoshop制作高光梦幻效果的艺术字教程
  • 2022-04-29DEDECMS注册成功页面加入马上激活链接转向注册邮
  • 2022-04-29WordPress网站优化方法
  • 2022-04-29array_values()在php中返回数组的操作实例
  • 2022-04-29浅析小程序中如何优雅地进行模块化处理?
  • 2022-04-29PhotoShop制作蓝色梦幻动漫签名溶图教程
  • 2022-04-29Dedecms怎么实现键盘翻页的功能
  • 2022-04-29浅析AntdV Upload组件customRequest怎么自定义上传方法
  • 2022-04-29Photoshop制作折纸风格的短信软件图标

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • MySQL高并发生成唯一订单号
    • Illustrator绘制动感绚丽的广告背景
    • Photoshop制作金属质感的艺术字教程
    • Photoshop设计复古风格的金属艺术字
    • 如何解决php微信输出乱码
    • 总结laravel中$request获取请求信息用法
    • php如何将html转为图片
    • uniapp怎么实现小程序页面的自由拖拽功能
    • 详解关于laravel自动路由
    • PHP调用今天的日期几月星期几

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有