🥳加入Scrapeless 社区申请免费试用以访问我们强大的网页抓取工具包!
返回博客

Node.js 中使用 Axios 入门:初学者指南

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

07-Nov-2024

众所周知,高效处理 HTTP 请求至关重要,而 Axios 就是一个简化这一过程的工具。无论您是从 API 中检索数据、向服务器发送数据,还是简单地从网站上抓取内容,Axios 都是一个非常棒的工具,可以简化流程。

让我们深入了解 Axios 是什么,它如何工作,并探索一些在 Node.js 中有效使用它的实际方法。

Node.js 中的 Axios 是什么?

Axios 是一个基于 Promise 的 HTTP 客户端,专为 客户端服务器端 JavaScript 环境设计。使用 Axios,您可以在前端应用程序中从浏览器以及在 Node.js 应用程序中从服务器发出 HTTP 请求。Axios 自动转换 JSON 数据并处理请求响应处理中的许多复杂性,使其易于与 API 交互并处理数据。

Axios 最初是作为基于浏览器的 HTTP 客户端构建的,但在服务器端,尤其是在 Node.js 中,它变得非常流行。凭借其简单的语法和广泛的自定义选项,Axios 已成为全球开发人员的首选库之一。

Axios 的关键特性:

  1. 基于 Promise: 由于 Axios 基于 Promise,它允许使用 async/await 语法编写更简洁、更易于管理的代码。这种方法可以轻松编写异步代码,而不会出现回调地狱,从而使代码更易读且更易维护。

  2. 自动数据转换: Axios 自动转换 JSON 数据,简化了以 JSON 格式发送和接收数据的过程。当它以 JSON 格式发送请求或接收响应时,它会自动解析和序列化数据,允许您直接使用 JavaScript 对象。

  3. 客户端和服务器端兼容性: Axios 在 客户端(浏览器中)和 服务器端(Node.js 中)都可以使用,使其在前端和后端开发中都非常灵活。在 Node.js 中使用时,Axios 简化了向 API 发出 HTTP 请求、执行服务器到服务器的数据获取等操作。

  4. 内置拦截器: Axios 支持请求和响应拦截器,这些拦截器可用于处理诸如日志记录、错误处理、身份验证或在发送请求或处理响应之前添加标头等任务。

  5. 可自定义配置: Axios 允许进行广泛的自定义。例如,您可以设置全局默认值,如标头或基本 URL,使您能够轻松地为不同的环境进行配置。

  6. 错误处理: Axios 提供强大的错误处理机制,允许您根据返回的状态代码捕获错误。您可以以不同的方式处理客户端和服务器错误,使响应处理更易于管理。

Node.js 中 Axios 的常见用例

  • 从 API 获取数据: Axios 通常在 Node.js 中用于从 API 获取数据,使其成为构建 RESTful 应用程序的理想选择,尤其是在您需要与第三方服务或微服务交互时。

  • 网页抓取: 当进行网页抓取时,Axios 可用于从网站获取 HTML 内容,尤其适合静态网站。结合 Cheerio 等工具,可以解析 HTML 以提取相关数据。

  • 处理身份验证: Axios 通常在 Node.js 中用于与身份验证服务交互,例如将凭据发送到 API 进行身份验证并处理令牌。

  • 文件上传/下载: 它能够处理二进制数据,因此您可以使用它来从服务器上传或下载文件。

遇到网页抓取难题,项目不断被封锁?
尝试使用 Scrapeless 使数据提取变得轻松高效,一个强大的工具,包罗万象。立即 免费 试用!

Node.js 中的示例使用

以下是使用 Node.js 中的 Axios 发出 GET 请求的示例:

javascript Copy
const axios = require('axios');

async function fetchData() {
  try {
    const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
    console.log(response.data);
  } catch (error) {
    console.error('Error fetching data:', error.message);
  }
}

fetchData();

这段代码展示了在 Node.js 中使用 Axios 发出请求的简便性。response.data 包含来自 API 的实际数据,而 error.message 处理可能发生的任何错误,提供了一种简化的请求处理方法。

Axios 是服务器端还是客户端?

Axios 是一个多功能的 HTTP 客户端,可以在 服务器端和客户端 环境中运行。以下是它如何适应每个环境:

  • 服务器端 (Node.js): 在 Node.js 中,Axios 可以从后端服务器发出 HTTP 请求。此功能通常用于服务器到服务器的通信、从第三方 API 检索数据以及抓取网站。
  • 客户端 (浏览器): 在前端应用程序中,Axios 处理 HTTP 请求,例如从 API 检索和发布数据。

通过使用 Axios,您可以获得一个统一的 API 来处理客户端和服务器 HTTP 请求,从而使代码更可重用,并减少了为前端和后端学习不同请求方法的必要性。

Axios 是一个 Node 模块吗?

是的,Axios 是一个 Node 模块。它是一个独立的库,这意味着您可以通过任何 Node.js 项目中的 npm 或 yarn 轻松安装它。它不是 Node.js 默认捆绑的,但可以通过将其作为依赖项安装到任何项目中。

要安装 Axios,您可以在终端中使用以下命令:

bash Copy
npm install axios

安装后,您可以在脚本顶部的使用:

javascript Copy
const axios = require('axios');

这个模块轻量级、快速,旨在处理 HTTP 请求,而不会给您的项目增加太多复杂性。

如何在终端中安装 Axios?

要在您的 Node.js 环境中安装 Axios,请打开终端并导航到项目的根目录。运行以下命令:

bash Copy
npm install axios

或者,如果您更喜欢 Yarn,您可以使用:

bash Copy
yarn add axios

安装完成后,您可以通过在上一节中所示的 require 或 import 来立即在项目中使用它。此安装将把 Axios 添加为项目中的依赖项,使您可以使用它的方法来高效地处理 HTTP 请求。

如何在网页抓取中使用 Axios

要有效地在 网页抓取 中使用 Axios,请按照以下步骤进行完整指南,从设置 Axios 到处理挑战并解析数据。以下是如何在网页抓取中使用 Axios 的细分:

1. 为网页抓取设置 Axios

首先,确保您已在项目中安装了 Node.jsAxios。您可以通过运行以下命令来安装 Axios:

bash Copy
npm install axios

安装完 Axios 后,它就可以用来向网站发出 HTTP 请求了。

2. 用于获取网页内容的基本用法

在进行网页抓取时,主要目标是获取网页的 HTML 内容。以下是如何使用 Axios 向网站发出简单的 GET 请求:

javascript Copy
const axios = require('axios');

async function fetchHTML(url) {
  try {
    const response = await axios.get(url);
    return response.data; // 页面的 HTML 内容
  } catch (error) {
    console.error(`Error fetching HTML: ${error.message}`);
  }
}

fetchHTML('https://example.com').then(html => console.log(html));

在这段代码中,fetchHTML 向提供的 URL 发送 GET 请求并返回 HTML 内容。这是从静态网站抓取数据的基础。

3. 解析 HTML 内容

要从 HTML 中提取特定信息,请使用诸如 Cheerio 之类的解析库。Cheerio 允许您使用类似 jQuery 的语法查询 HTML,从而轻松地定位元素。通过运行以下命令来安装它:

bash Copy
npm install cheerio

以下是如何在 Axios 之外使用 Cheerio 来从网页抓取数据:

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeWebsite(url) {
  try {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);

    // 示例:提取所有文章标题
    const titles = [];
    $('h2.article-title').each((i, element) => {
      titles.push($(element).text());
    });

    console.log('Scraped Titles:', titles);
  } catch (error) {
    console.error(`Error scraping website: ${error.message}`);
  }
}

scrapeWebsite('https://example.com/articles');

在这个示例中,Axios 检索 HTML,Cheerio 解析它以提取文章标题(在本例中为 h2.article-title)。您可以调整选择器以定位页面上的不同元素。

4. 处理标头和用户代理

某些网站会阻止来自非浏览器客户端的请求。为了模仿真正的浏览器,请在您的 Axios 请求中包含诸如 User-Agent 之类的标头。以下是如何设置标头:

javascript Copy
const axios = require('axios');

async function fetchWithHeaders(url) {
  try {
    const response = await axios.get(url, {
      headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
      }
    });
    return response.data;
  } catch (error) {
    console.error(`Error with headers: ${error.message}`);
  }
}

fetchWithHeaders('https://example.com').then(html => console.log(html));

添加标头可以帮助防止网站阻止您的请求。User-Agent 标头使您的请求看起来来自真正的浏览器。

5. 处理 JavaScript 渲染的页面

Axios 非常适合静态网站,但它无法执行 JavaScript。如果您要抓取以 JavaScript 为主的网站,请使用 PuppeteerPlaywright 来完全渲染页面。对于仅限 Axios 的解决方案,请关注静态内容,或查找诸如 API 之类的替代数据源。

6. 错误处理和速率限制

错误处理在网页抓取中至关重要,可以用于管理诸如 速率限制或被阻止的请求 之类的问题。以下是一个带有基本重试机制的示例:

javascript Copy
const axios = require('axios');

async function fetchWithRetries(url, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await axios.get(url);
      return response.data;
    } catch (error) {
      console.error(`Attempt ${i + 1} failed: ${error.message}`);
      if (i === retries - 1) throw error;
    }
  }
}

fetchWithRetries('https://example.com').then(html => console.log(html));

7. 存储或处理数据

获得数据后,将其保存到文件或数据库 以供进一步分析。例如,您可以使用 fs 将数据保存到 JSON 文件:

javascript Copy
const fs = require('fs');
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeAndSave(url) {
  try {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);
    const results = [];

    // 抓取特定数据
    $('h2.article-title').each((i, element) => {
      results.push($(element).text());
    });

    fs.writeFileSync('data.json', JSON.stringify(results, null, 2));
    console.log('Data saved to data.json');
  } catch (error) {
    console.error(`Error saving data: ${error.message}`);
  }
}

scrapeAndSave('https://example.com/articles');

在这个示例中,抓取的数据将保存到 data.json 中,您可以稍后加载它以进行分析。

8. 处理常见挑战

  • 机器人检测: 添加标头和处理 Cookie 可以使请求看起来更合法。
  • 速率限制: 在请求之间使用延迟或实现重试机制以避免压垮服务器。
  • 被阻止的 IP: 旋转 IP 或使用代理服务以避免在抓取具有积极反抓取措施的网站时被阻止。

结论

在本指南中,我们介绍了在 Node.js 中使用 Axios 进行网页抓取 的基本知识。您学习了 Axios 作为 Node.js 模块的作用,如何安装和设置它,并探索了诸如添加标头、使用 Cheerio 解析 HTML 以及处理诸如机器人检测和错误管理之类的常见网页抓取挑战等实用技术。

对于从事 API 集成、网页抓取或数据收集的开发人员来说,Axios 提供了一种强大、灵活且高效的方法来发出 HTTP 请求和处理响应。虽然它非常适合静态内容,但将 Axios 与 Puppeteer 或 Playwright 等工具配对可以帮助克服动态内容的限制。

借助这些策略,您可以有效地使用 Axios,使其成为任何开发人员工具包中不可或缺的一部分。尝试使用不同的配置来优化您的 API 调用和网页抓取项目,使其更可靠、更高效。

在Scrapeless,我们仅访问公开数据,同时严格遵守适用的法律、法规和网站隐私政策。 本博客内容仅用于演示目的,不涉及任何非法或侵权行为。 对于使用本博客或第三方链接的信息,我们不做任何保证,也不承担任何责任。 在参与任何抓取活动之前,请咨询您的法律顾问并查看目标网站的服务条款或获取必要的权限。

最受欢迎的文章

目录