利用axios库的爬虫程序如何使用HTTP

news/2025/3/13 10:19:35/
http://www.w3.org/2000/svg" style="display: none;">

在 JavaScript 中,axios 是一个非常流行的 HTTP 客户端库,它可以用来发送各种 HTTP 请求(如 GET, POST 等),并处理响应。我们可以使用 axios 来编写一个简单的爬虫程序,该程序抓取网页内容并提取需要的信息。

https://i-blog.csdnimg.cn/direct/31fda6e208d441c89d55543b71438577.png#pic_center" alt="在这里插入图片描述" />

1、安装 Axios

首先,你需要安装 axios。在 Node.js 项目中,你可以通过 npm 安装它:

npm install axios

2、编写爬虫程序

假设你要抓取某个网页上的图片,以下是一个简单的示例,演示如何使用 axios 发送 HTTP 请求并下载网页上的图片。

代码示例:
const axios = require('axios');
const fs = require('fs');
const path = require('path');
const cheerio = require('cheerio');  // 使用 cheerio 解析 HTML 内容// 下载图片的函数
async function downloadImage(imageUrl, filename) {const writer = fs.createWriteStream(filename);const response = await axios({url: imageUrl,method: 'GET',responseType: 'stream',  // 以流的方式处理响应});response.data.pipe(writer);  // 将响应流写入文件return new Promise((resolve, reject) => {writer.on('finish', resolve);  // 下载完成后解决 Promisewriter.on('error', reject);  // 如果有错误则拒绝 Promise});
}// 抓取网页并下载所有图片的函数
async function crawlAndDownloadImages(url) {try {// 1. 请求网页内容const response = await axios.get(url);const html = response.data;// 2. 使用 cheerio 解析网页内容const $ = cheerio.load(html);const imgTags = $('img');  // 获取所有 <img> 标签// 3. 提取每个 <img> 标签的 src 属性,作为图片的 URLconst imageUrls = [];imgTags.each((index, img) => {const imgUrl = $(img).attr('src');if (imgUrl) {// 处理相对路径图片if (!imgUrl.startsWith('http')) {const parsedUrl = new URL(imgUrl, url);  // 将相对路径转换为绝对路径imageUrls.push(parsedUrl.href);} else {imageUrls.push(imgUrl);}}});// 4. 下载所有图片for (let i = 0; i < imageUrls.length; i++) {const imageUrl = imageUrls[i];const imageName = path.basename(imageUrl);  // 获取图片名称console.log(`下载图片: ${imageUrl}`);await downloadImage(imageUrl, path.join(__dirname, 'downloads', imageName));  // 保存图片到本地console.log(`图片下载完成: ${imageName}`);}} catch (error) {console.error('爬虫出错:', error);}
}// 运行爬虫程序
const url = 'https://example.com';  // 替换为你想抓取的网页
crawlAndDownloadImages(url);

3、代码说明

  1. 安装依赖

    • axios:用于发送 HTTP 请求。
    • cheerio:用于解析 HTML 文档并提取 DOM 元素。
    • fs:用于文件操作(保存图片到本地)。
    • path:用于处理文件路径。
  2. downloadImage 函数:此函数接收一个图片 URL 和文件名,使用 axios 发送 GET 请求并将返回的图片数据保存到本地。图片数据是以流的方式处理的,因此我们使用 .pipe() 方法将响应流写入到文件中。

  3. crawlAndDownloadImages 函数:此函数抓取网页内容并解析出所有的 <img> 标签,然后提取其 src 属性(即图片 URL)。接着,它会下载每个图片。

  4. cheerio.loadcheerio 是一个非常轻量级的 jQuery 实现,可以用来解析 HTML 页面并操作 DOM 元素。我们使用 cheerio 提取所有 <img> 标签并获取其 src 属性。

  5. 图片 URL 处理:对于相对路径的图片,我们使用 new URL(imgUrl, url) 将其转换为绝对路径。

  6. 图片下载:使用 axios 发送 HTTP 请求并以流的形式下载图片,最后保存到本地。

  7. 运行爬虫:调用 crawlAndDownloadImages(url) 启动爬虫,传入目标网页的 URL,程序将抓取网页上的所有图片并保存到 downloads 文件夹中。

4、执行程序

  1. 在项目目录中创建 index.js 文件,并将上述代码粘贴进去。
  2. 执行爬虫程序:
node index.js
  1. 程序将下载网页中的所有图片并保存在当前目录下的 downloads 文件夹中。

5、总结

通过 axioscheerio,你可以轻松地编写一个爬虫程序来抓取网页并下载其中的图片。axios 负责发送 HTTP 请求,cheerio 用于解析 HTML 内容,提取需要的元素。这个爬虫程序能够处理相对路径的图片 URL,并将所有下载的图片保存在本地目录中。你可以根据需要扩展此程序,处理更多类型的资源或实现更复杂的爬取逻辑。


http://www.ppmy.cn/news/1578766.html

相关文章

如何通过自动化测试提升DevOps效率?

引言 在数字化转型的浪潮中&#xff0c;企业对软件交付速度和质量的要求日益严苛。DevOps通过持续集成&#xff08;CI&#xff09;、持续交付&#xff08;CD&#xff09;和持续监控&#xff08;CM&#xff09;等实践&#xff0c;将开发、测试与运维深度整合&#xff0c;显著缩…

java Long[] ids转为List<Long> ids

方法 1&#xff1a;使用 Arrays.asList import java.util.Arrays; import java.util.List;public class Main {public static void main(String[] args) {Long[] ids {1L, 2L, 3L, 4L};List<Long> list Arrays.asList(ids);System.out.println(list); // 输出: } } 注…

C# 初学者的系统学习路径与职业规划指南

C#基础知识与核心技能 C# 初学者的系统学习路径与职业规划指南一、基础知识与核心技能二、进阶技能与设计模式三、.NET Core 程序员的职业规划引用来源1. **Stack Overflow**2. **GitHub**3. **Reddit 社区**4. **Discord 社区**5. **Microsoft Learn**6. **YouTube 频道**7. *…

Kubernetes 中 YAML 文件详解

Kubernetes 中 YAML 文件详解 在 Kubernetes&#xff08;简称 K8s&#xff09;的世界里&#xff0c;YAML&#xff08;Yet Another Markup Language&#xff09;文件是核心配置工具。K8s 作为一个强大的容器编排系统&#xff0c;允许用户通过 YAML 文件来定义和管理各种资源&am…

【Android】adb shell基本使用教程

adb shell 是 Android Debug Bridge (ADB) 工具中的一个命令&#xff0c;用于在连接的 Android 设备或模拟器上执行 shell 命令。通过 adb shell&#xff0c;你可以直接与设备的 Linux 内核交互&#xff0c;执行各种操作。 基本用法 启动 adb shell&#xff1a; 在终端或命令提…

Spring Boot集成EasyExcel

1. 初始化Spring Boot项目 首先&#xff0c;使用Spring Initializr&#xff08;https://start.spring.io/&#xff09;生成一个基本的Spring Boot项目。选择以下依赖项&#xff1a; Spring WebLombok (用于减少样板代码)SLF4J (用于日志记录) 2. 添加依赖 在你的pom.xml文件…

高阶哈希算法

SHA-256简介 SHA-256 是 **SHA-2&#xff08;Secure Hash Algorithm 2&#xff09;**家族中的一种哈希算法&#xff0c;由美国国家安全局设计&#xff0c;并于 2001 年发布。它能够将任意长度的数据映射为一个固定长度256 位&#xff0c;即 32 字节的哈希值&#xff0c;通常以…

日志系统项目——准备工作了解类的设计模式如单例模式、工厂模式、代理模式

1.六大原则 1.1 单一职责原则 类的职责应该单⼀&#xff0c;⼀个⽅法只做⼀件事。职责划分清晰了&#xff0c;每次改动到最⼩单位的⽅法或 类。 使⽤建议&#xff1a;两个完全不⼀样的功能不应该放⼀个类中&#xff0c;⼀个类中应该是⼀组相关性很⾼的函 数、数据的封装 ⽤例…