Node.js爬虫实战:搜狗图片爬取

2023-12-05

说在前面

当我们在网上寻找图片时,经常会遇到需要批量下载搜索结果中的图片的情况。而搜狗作为中国颇具影响力的搜索引擎之一,其图片搜索功能提供了丰富多样的图片资源。在这种情况下,我们希望能够通过编程的方式,批量下载搜狗图片搜索结果中的图片,以便后续的使用和处理。

本文将介绍如何使用Node.js编写脚本,通过搜狗图片API获取图片搜索结果,并批量下载搜索结果中的图片。我们将深入探讨如何利用Node.js中的模块来发送HTTP请求、处理API返回的数据,并将图片保存到本地文件系统中。

通过本文的指导,读者将学习如何利用编程的方式高效地获取和保存网络上的图片资源,为日常工作和项目开发提供了一种全新的思路和解决方案。

需要注意的是,网络爬虫在使用过程中需要遵守法律法规,尊重网站的隐私政策和使用条款。在进行数据抓取时,请确保遵守相关规定并尊重他人的权益。

准备

1、什么是搜狗图片API?

  • 搜狗图片API是搜狗搜索引擎提供的一项功能接口,用于获取图片搜索结果数据。通过发送HTTP请求到搜狗图片API,我们可以获取包含图片信息的JSON数据,其中包括图片链接、图片标题等相关信息。

2、如何使用axios获取API数据?

  • Axios是一个流行的基于Promise的HTTP客户端,它可以用于发送HTTP请求。我们可以使用Axios库来发送GET请求到搜狗图片API,并获取API返回的数据。Axios提供了简单易用的API,可以轻松地发送异步请求,并处理返回的数据。

3、如何解析API数据中的图片链接?

  • API返回的数据通常是以JSON格式进行传输。在获取到API返回的数据后,我们可以使用JavaScript的JSON解析功能来解析数据并提取所需的信息。在本例中,我们需要解析搜狗图片API返回的JSON数据,并提取每个图片结果的图片链接。

  • 通过遍历API返回的数据对象,我们可以访问每个图片结果的属性。对于每个结果,我们可以检查是否存在pic_url属性,该属性包含了图片的链接。如果存在pic_url属性,则将其保存到一个数组中,以便后续使用。

  • 解析API数据中的图片链接可以采用循环遍历的方式,逐个提取并存储图片链接。这样,我们就可以在后续的步骤中使用这些链接来下载图片。

代码实现

1、引入所需的模块

我们首先引入了Node.js的核心模块之一axios,以及文件系统模块fs。

const axios = require('axios');
const fs = require('fs');

2、定义搜狗图片API的URL

我们设置了搜狗图片API的URL,这是我们将要向其发送请求以获取图片数据的地方。

const apiUrl = 'http://pic.sogou.com/pics/json.jsp';

3、发送HTTP请求并获取数据

使用axios发送GET请求到搜狗图片API,并获取API返回的数据。

axios.get(apiUrl, {
  params: {
    query: keyword,
    start: 0,
    reqType: 'ajax',
    reqFrom: 'result',
    tn: 0
  }
})
.then(response => {})

4、解析API返回的数据

我们解析API返回的JSON数据,提取出其中的图片链接。

 const data = response.data;
if (data.items && data.items.length > 0) {
const imageLinks = data.items.slice(0, num).map(item => item.pic_url);

// 使用fs模块创建保存图片的目录
const dir = './downloaded_images';
if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir);
}

// 根据提取出的图片链接,使用axios下载图片并保存到指定目录中
imageLinks.forEach((link, index) => {
    const filename = `${dir}/image_${index + 1}.jpg`;
    axios({
    method: 'get',
    url: link,
    responseType: 'stream'
    })
    .then(response => {
    response.data.pipe(fs.createWriteStream(filename));
    });
});

5、创建保存图片的目录

我们使用fs模块创建一个名为downloaded_images的目录,用于保存下载的图片。

const dir = './downloaded_images';
if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir);
}

6、下载图片并保存

对于每个提取出的图片链接,我们使用axios再次发送HTTP请求,下载图片并保存到指定的目录中。

imageLinks.forEach((link, index) => {
    const filename = `${dir}/image_${index + 1}.jpg`;
    axios({
    method: 'get',
    url: link,
    responseType: 'stream'
    })
    .then(response => {
        response.data.pipe(fs.createWriteStream(filename));
    })
});

7、完整代码

const axios = require('axios');
const fs = require('fs');

// 定义搜狗图片API的URL
const apiUrl = 'http://pic.sogou.com/pics/json.jsp';

// 定义搜索关键词和需要下载的图片数量
const keyword = '美景'; // 替换为你想要搜索的关键词
const num = 10; // 替换为你想要下载的图片数量

// 使用axios发送HTTP请求到搜狗图片API,并获取API返回的数据
axios.get(apiUrl, {
  params: {
    query: keyword,
    start: 0,
    reqType: 'ajax',
    reqFrom: 'result',
    tn: 0
  }
})
.then(response => {
  // 解析API返回的数据,提取出图片链接
  const data = response.data;
  if (data.items && data.items.length > 0) {
    const imageLinks = data.items.slice(0, num).map(item => item.pic_url);

    // 使用fs模块创建保存图片的目录
    const dir = './downloaded_images';
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir);
    }

    // 根据提取出的图片链接,使用axios下载图片并保存到指定目录中
    imageLinks.forEach((link, index) => {
      const filename = `${dir}/image_${index + 1}.jpg`;
      axios({
        method: 'get',
        url: link,
        responseType: 'stream'
      })
      .then(response => {
        response.data.pipe(fs.createWriteStream(filename));
      });
    });
  } else {
    console.log('No images found for the given keyword.');
  }
})
.catch(error => {
  console.error('Error fetching data:', error);
});

公众号

关注公众号『 前端也能这么有趣 』,获取更多新鲜内容。

说在后面

???? 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 ???? ,平时也喜欢写些东西,既为自己记录 ????,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 ????,写错的地方望指出,定会认真改进 ????,偶尔也会在自己的公众号『 前端也能这么有趣 』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 ????。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js爬虫实战:搜狗图片爬取 的相关文章

随机推荐

  • Latex公式中矩阵的方括号和圆括号表示方法

    一 背景 在使用Latex写论文时 不可避免的涉及到矩阵公式 有的期刊要求矩阵用方括号 有的期刊要求矩阵用圆括号 因此 特记录一下Latex源码在两种表示方法上的区别 以及数组和方程组的扩展 二 矩阵的方括号表示 首先所有的矩阵肯定都是在标
  • Python机器学习、深度学习入门丨气象常用科学计算库、气象海洋常用可视化库、爬虫和气象海洋数据、气象海洋常用插值方法、EOF统计分析、WRF模式后处理等

    目录 专题一 Python软件的安装及入门 专题二 气象常用科学计算库 专题三 气象海洋常用可视化库 专题四 爬虫和气象海洋数据 专题五 气象海洋常用插值方法 专题六 机器学习基础理论和实操 专题七 机器学习的应用实例 专题八 深度学习基础
  • 糟了,数据库崩了,又好像没崩

    前言 2023 年某一天周末 新手程序员小明因为领导安排的一个活来到公司加班 小明三下五除二 按照领导要求写了一个跑批的数据落库任务在测试环境执行 突然间公司停电了 小明大惊 糟了 MySQL 还在跑任务 会不会因为突然断电 导致数据库崩了
  • Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)

    目录 一 前言 二 通过类型来获取Bean 0 总述 重要 1 基本介绍 2 应用实例 三 通过指定构造器为Bean注入属性 1 基本介绍 2 应用实例 四 通过p命名空间为Bean注入属性 1 基本介绍 2 应用实例 五 通过ref引用实
  • 搜狐CEO张朝阳:长期被动刷手机人就废了

    大家好 我是老洪 刚看到一则关于搜狐CEO张朝阳谈论关于使用手机问题的资讯 颇有感触 聊两句 在12月2日下午 一场特别的讲座在西安交通大学引起了热议 这场讲座的主讲人 正是搜狐公司的首席执行官张朝阳 他不仅是一位优秀的企业家 更是一位热爱
  • 腾讯云购买服务器多大合适?

    对于个人日常建站来说 购买多大的服务器合适需要根据实际需求进行考虑 一般个人用户的话2GB或者是4GB内存接基本够用了 原文地址 腾讯云购买服务器多大合适 轻量云Cloud 首先 需要考虑的是网站的访问量 如果只是一个简单的个人网站 每天只
  • 2023最新网络安全Web Hacking 101笔记,祝你更好的学习网络安全!

    在计算机技术如日中天的今天 Web安全问题也接踵而来 但Web安全却 入门简单精通难 涉及技术非常多且广 学习阻力很大 为此今天分享一份94页的 Web Hacking 101 笔记 包含Web安全知识 例如HTML注入 XSS CSRF
  • python爬虫数据采集

    近几年来 python的热度一直特别火 大学期间 也进行了一番深入学习 毕业后也曾试图把python作为自己的职业方向 虽然没有如愿成为一名python工程师 但掌握了python 也让我现如今的工作开展和职业发展更加得心应手 这篇文章主要
  • 美国国防部采办中的ChatGPT:高级语言模型的机遇和风险

    随着人工智能的不断进步 像 ChatGPT 这样的大型语言模型有可能彻底改变国防采购和合同签订的方式 由于语言模型能够生成类似人类的文本 因此可以自动完成采购中的许多重复而耗时的任务 如文件准备 研究和沟通 与任何新技术一样 国防工业采用大
  • MySQL 8.0 压缩版安装教程

    1 下载mysql压缩包 2 解压文件 我这里把压缩包解压到E盘的根目录 3 配置系统环境变量 为了让Windows系统可以识别我们这里后面会用到的MySQL命令 需要给当前系统添加环境变量 我的电脑 右键 gt 属性 gt 高级系统设置
  • 轻量应用服务器小程序部署可以吗?

    轻量应用服务器是指提供了一定的并发能力 等功能的云服务器 它可以实现对网站 小程序提供高效 安全的技术支持 而小程序则是一种新的开放能力 不仅具有出色的使用体验 还可以在微信内被便捷地获取 为用户提供便利的服务 原文地址 轻量应用服务器小程
  • 浅析Hotspot的经典7种垃圾收集器原理特点与组合搭配

    浅析Hotspot的经典7种垃圾收集器原理特点与组合搭配 HotSpot共有7种垃圾收集器 3个新生代垃圾收集器 3个老年代垃圾收集器 以及G1 一共构成7种可供选择的垃圾收集器组合 新生代与老年代垃圾收集器之间形成6种组合 每个新生代垃圾
  • WebGL笔记:图形缩放的原理和实现

    缩放 1 原理 缩放可以理解为对向量长度的改变 或者对向量坐标分量的同步缩放 如下图 比如 让向量OA 收缩到点B的位置 也就是从OA变成OB 缩放了一半 2 公式 已知 点A的位置是 ax ay az 点A基于原点內缩了一半 求 点A內缩
  • Tomcat 配合虚拟线程,一种新的编程体验

    Java 21 在今年早些时候的 9 月 19 日就正式发布 并开始正式引入虚拟线程 但是作为 Java 开发生态中老大哥 Spring 并没有立即跟进 而是在等待了两个月后的 11 月 29 日 伴随着 Spring Boot 3 2 版
  • leetcode:468. 验证IP地址

    验证IP地址 中等 249 相关企业 给定一个字符串 queryIP 如果是有效的 IPv4 地址 返回 IPv4 如果是有效的 IPv6 地址 返回 IPv6 如果不是上述类型的 IP 地址 返回 Neither 有效的IPv4地址 是
  • 《许犁庭与柔性世界》第三十章 出云,乘雷与君影

    再次回到校园 伴随着老师舒缓的节奏 徜徉在大大小小 深浅不一的草垛间 头顶碧空如洗 脚底金蕊盖霜 四周稻色黄莽 远处绿黛青芒 境与心会 便欲驭风跨蜿虹 1 若不是老师一把拉住 许犁庭估计会一头撞到前方那澹烟笼罩的巨树上 呵呵 第一次进入伊拉
  • 如何更好地平衡工作和生活?从实际出发

    在当今快节奏的生活中 平衡工作和生活的重要性越来越受到人们的关注 工作和生活是相辅相成的 只有通过良好的平衡 我们才能在工作和生活中获得最佳的状态和体验 然而 如何更好地平衡工作和生活呢 下面将介绍一些实用的方法 一 制定合理的时间表 制定
  • 某音订单接口在电商行业中的重要性及实践应用

    一 引言 随着移动互联网的快速发展 短视频平台抖音已经成为人们日常生活中不可或缺的一部分 越来越多的商家开始利用抖音平台推广和销售商品 从而实现商业变现 在这个过程中 抖音订单接口起到了至关重要的作用 本文将详细探讨抖音订单接口在电商行业中
  • 利用FileZilla下载PHOENIX高分辨率光谱

    下载PHOENIX光谱 在诸如CCF SED拟合中经常需要下载模板光谱 因此有一些大牛提供了相关的光谱库供大家使用 例如 Gottingen Spectral Libary by PHOENIX 论文 A new extensive lib
  • Node.js爬虫实战:搜狗图片爬取

    说在前面 当我们在网上寻找图片时 经常会遇到需要批量下载搜索结果中的图片的情况 而搜狗作为中国颇具影响力的搜索引擎之一 其图片搜索功能提供了丰富多样的图片资源 在这种情况下 我们希望能够通过编程的方式 批量下载搜狗图片搜索结果中的图片 以便