Axios 是一个广受欢迎的、基于 Promise 的 HTTP 客户端库,可用于在 Node.js 中发起 HTTP 请求。它轻量且易于使用,是 Web 爬虫项目的绝佳选择。
Axios 支持多种功能,例如代理、JSON 数据的自动转换、请求取消以及拦截器支持,这使您能够处理身份验证和错误处理等任务。

Axios 是一个广受欢迎的、基于 Promise 的 HTTP 客户端库,可用于在 Node.js 中发起 HTTP 请求。它轻量且易于使用,是 Web 爬虫项目的绝佳选择。
Axios 支持多种功能,例如代理、JSON 数据的自动转换、请求取消以及拦截器支持,这使您能够处理身份验证和错误处理等任务。
代理(也称为代理服务器)在客户端(如网页浏览器或爬虫)与目标服务器(如网站)之间充当中介。
代理服务器接收来自客户端的请求,并将其转发至目标服务器。随后,目标服务器将响应发送回代理服务器,代理服务器再将其转发给客户端。
在网页抓取中,您可以使用代理来隐藏抓取工具的 IP 地址,从而避免被抓取的网站检测并拦截请求。此外,使用多个代理有助于防止被检测并避免被封禁。
部分代理服务商提供IP轮换功能,您可通过轮换代理来规避封禁。
要在 Axios 和 Node.js 中使用代理,您的计算机上需已安装 Node.js 和 npm(Node 包管理器)。若尚未安装,可从 Node.js 官网下载并安装。
安装 Node.js 和 npm 后,打开终端,为项目创建一个新文件夹,并运行 `npm init` 命令。按照提示创建一个基础的 package.json 文件。
使用以下命令安装 Axios:
npm install axios
让我们使用 Axios 发出第一个请求。我们将向 ipify 端点发送一个 GET 请求。该请求将返回我们的 IP 地址。
创建一个 index.js 文件,并粘贴以下代码:
// Import axios
const axios = require('axios');
(async () => {
// For storing the response
let res
try {
// Make a GET request with Axios
res = await axios.get('https://api.ipify.org?format=json')
// Log the response data
console.log(res.data)
} catch(err) {
// Log the error
console.log(err)
}
// Exit the process
process.exit()
})()首先导入 axios 库,并使用 get 方法向 api.ipify.org 端点发送请求。
您可以在终端中使用命令 `node index.js` 运行该代码。输出结果应显示您的 IP 地址。请通过浏览器访问该 URL 以再次确认结果。
在编写任何代码之前,请访问 Free Proxy List 网站并选择离您所在位置最近的代理。以我为例,我将选择一个德国的代理。
Axios 的 `get` 方法支持一个名为 options 的第二个参数。在此参数中,我们可以定义代理的详细信息。
使用代理的 GET 请求代码如下所示:
res = await axios.get('https://api.ipify.org?format=json', {
proxy: {
protocol: 'http',
host: '217.6.28.219',
port: 80
}
})运行代码后,你会发现返回的 IP 地址与你自己的不同。这是因为请求是通过代理服务器路由的,从而隐藏了你的 IP 地址,使其无法被检测到。
订阅高级代理服务后,您将获得用户名和密码,用于在应用程序中进行身份验证。
Axios 的 `proxy` 对象有一个 `auth` 属性,用于接收认证凭据。使用此配置的 GET 请求示例如下:
res = await axios.get('https://api.ipify.org?format=json', {
proxy: {
protocol: 'http',
host: '217.6.28.219',
port: 80,
auth: {
username: "PROVIDED_USER",
password: "PROVIDED_PASSWORD"
}
}
})在 Axios 中配置代理的另一种方法是设置 `http_proxy` 或 `https_proxy` 环境变量。此方法可省去在 Axios 命令中配置代理细节的步骤,因为系统会自动从环境变量中获取这些信息。
为了实现跨平台兼容性,建议安装 `cross-env` 包,该包为 Windows 系统实现了类似 `export` 的命令。
使用以下命令全局安装该包:
npm install -g cross-env
让我们清理 `axios.get` 代码并将其恢复到初始版本。代码应如下所示:
res = await axios.get('https://api.ipify.org?format=json')
我们不再直接通过 `node index.js` 运行代码,而是像下面这样在命令前添加代理 URL:
cross-env https_proxy=http://217.6.28.219:80/ node index.js
脚本的输出应为代理的 IP 地址,而非您本机的 IP。要确认这一点,您可以在浏览器中访问 ipify 网址。
轮换代理是个好主意,因为它有助于避免被检测,并防止网站封禁您的 IP 地址。网站可能会追踪并封禁在短时间内发出过多请求的 IP 地址,或与爬网活动相关的 IP 地址。
我们可以利用 Free Proxy List 网站整理一份代理列表,并在每次 `axios` 请求时轮换使用。
请注意,您在该网站上找到的代理列表可能与我编译的列表有所不同。我创建的列表如下所示:
const proxiesList = [
{
protocol: 'http',
host: '217.6.28.219',
port: 80
},
{
protocol: 'http',
host: '103.21.244.152',
port: 80
},
{
protocol: 'http',
host: '45.131.4.28',
port: 80
}
];好的,现在让我们将 `proxy` 属性重新加入 `axios` 配置中。但与直接使用单一代理不同,我们将从代理列表中随机选取一个。代码如下所示:
res = await axios.get('https://api.ipify.org?format=json', {
proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]
})以下是 index.js 文件的内容:
// Import axios
const axios = require('axios');
const proxiesList = [
{
protocol: 'http',
host: '217.6.28.219',
port: 80
},
{
protocol: 'http',
host: '172.67.180.244',
port: 80
},
{
protocol: 'http',
host: '45.131.4.28',
port: 80
}
];
(async () => {
// For storing the response
let res
try {
// Make a GET request with Axios
res = await axios.get('https://api.ipify.org?format=json', {
proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]
})
// Log the response data
console.log(res.data)
} catch(err) {
// Log the error
console.log(err)
}
// Exit the process
process.exit()
})()使用 WebScrapingAPI 等服务提供的付费代理比使用免费代理更好,因为它们更可靠、速度更快,并且安全性更高。付费代理被网站封禁的可能性更低,延迟也更小。
相比之下,免费代理可能速度慢、不稳定、含有恶意软件,且容易被网站封禁。
想试用 WebScrapingAPI 吗?没问题,只需注册我们的 14 天免费试用,您即可使用所有酷炫功能,甚至还能获得 5,000 个积分供您自由探索。
注册账号后,前往 API 沙盒,在“代码示例”部分选择“代理模式”选项卡
现在让我们在代码中使用代理 URL。axios 的 GET 请求将如下所示:
res = await axios.get('https://api.ipify.org?format=json', {
proxy: {
host: 'proxy.webscrapingapi.com',
port: 80,
auth: {
username: 'webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter',
password: '[YOUR_API_KEY]'
}
}
})通过 `username` 属性,您可以启用或禁用特定的 API 功能。请注意,您还必须在 `password` 属性中设置您的 API 密钥。您可以在此处查看完整的文档。
每次运行此代码时,您都会获得不同的 IP 地址,因为 WebScrapingAPI 会在每次请求时轮换 IP。您可以通过阅读“代理模式”文档进一步了解此功能。
此外,您还可以选择在数据中心代理和住宅代理之间切换。如需了解我们提供的不同类型代理的更多信息,请访问代理文档。
使用代理是网络爬虫的重要环节,它能帮助您隐藏 IP 地址并访问被封锁的网站。Axios 是一款功能强大的数据抓取库,配合可靠的代理使用,可实现高效快速的数据提取。
通过使用 WebScrapingAPI 这样的高级代理服务,您将能够使用包括 IP 轮换以及在数据中心代理和住宅代理之间切换在内的多种功能。
希望本文能帮助您深入了解如何在 Axios 和 Node.js 中使用代理,以及它如何满足您的数据抓取需求。欢迎注册我们的 14 天免费试用,亲身体验我们的服务并探索所有功能。