简要说明
- Node Fetch 本身不支持代理,因此开发人员必须将其与https-proxy-agent搭配使用,以便通过代理服务器路由请求。
- 初始化 Node.js 项目后,安装所需的依赖项
(node-fetch+https-proxy-agent),并创建一个异步刮擦函数来处理请求。 - 默认情况下,请求会使用你的真实 IP–ident.me等服务可帮助确认你的代理集成是否正常。
- 通过构建代理 URL(如
http://HOST:PORT)并将HttpsProxyAgent实例传递给fetch()的代理选项来配置代理。 - 为避免禁用,可通过迭代代理列表轮流使用多个代理,并为每个请求创建一个新代理。
- 利用 Node Fetch + 旋转代理,您可以建立持久的刮擦工作流程,减少 IP 屏蔽并绕过基本的地理限制。
Node Fetch是一个广泛使用的 npm 软件包,每周下载量约为 5300 万次。它是一个轻量级模块,将Fetch API移植到Node.js生态系统中,让您可以直接从代码中发送 POST 数据、进行 GET 请求和删除内容。
尽管 Node Fetch 在网络搜刮等任务中很受欢迎,但它本身并不支持代理。为避免 IP 被屏蔽,您需要使用https-proxy-agent。
在本文中,您将学习如何将代理与 Node Fetch 集成并使用。
使用节点获取代理
在开始本教程之前,请确保您已安装Node.js 14或更新版本。
配置代码库
首先,导航到要启动代码库的文件夹,然后使用npm init 初始化 Node.js 代码库。填写必要的信息(即许可证、作者姓名等)。完成后,您的package.json应该如下所示:
{<br> "name":"proxies",<br> "version":"1.0.0",<br> "description":"一个使用代理进行搜刮的简单 Node 脚本",<br> "main":"index.js",<br> "scripts":{<br> "test":"echo \"Error: no test specified\" && exit 1"<br> },<br> "author":"KealanP",<br> "license":"ISC"<br>}
安装依赖项并创建 Node 脚本
本教程需要两个依赖项:
- https-proxy-agent:用于配置和使用代理的软件包。
- 节点获取:您进行网络请求时使用的软件包。
运行以下命令安装依赖项:
<code>npm i https-proxy-agent
npm i node-fetch默认情况下,Node.js 会在package.json 中查找一个名为index.js 的文件。为确保脚本正常运行,您需要创建该文件,并用它来进行网络请求和配置代理。
安装依赖项并创建 Node 脚本
本教程需要两个依赖项:
- https-proxy-agent:用于配置和使用代理的软件包。
- 节点获取:您进行网络请求时使用的软件包。
运行以下命令安装依赖项:
<code>npm i https-proxy-agent
npm i node-fetch默认情况下,Node.js 会在package.json 中查找一个名为index.js 的文件。为确保脚本正常运行,您需要创建该文件,并用它来进行网络请求和配置代理。
创建好index.js文件后,就可以进行网络请求了(不使用代理)。
首先,您需要创建应用程序的基础结构,即一个名为scrape 的异步函数,该函数包含刮板逻辑。在index.js 中粘贴以下代码:
<code>import fetch from 'node-fetch';
const scrape = async () => {
};
scrape();在这里,你将导入node-fetch并创建scrape函数,然后调用该函数。现在,函数体是空的,但接下来你将在其中填入刮擦代码。
为使导入与此处使用的ES6 模块语法兼容,您需要在 package.json 的顶层添加"type"(类型)和 "module"(模块):"模 块 ",以便使用import关键字而不是require。
您的package.json应该是这样的
<code>{
"name": "proxies",
"type": "module",
"version": "1.0.0",
"description": "A simple Node script to scrape using proxies",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "KealanP",
"license": "ISC",
"dependencies": {
"https-proxy-agent": "^7.0.4",
"node-fetch": "^3.3.2"
}
}此时,您需要决定向哪个 URL 发送 HTTP 请求。在本文中,你将使用 ident.me,它是一种能回声显示客户端 IP 地址并告诉你代理是否正常的服务。ident.me是一种网络服务,只要每秒请求不超过 5000 个,你就可以访问,无需事先获得许可。
修改index.js为如下所示:
import fetch from 'node-fetch';
<code>const scrape = async () => {
const url = 'https://ident.me/';
const response = await fetch(url)
const text = await response.text();
console.log(text);
};
scrape();使用node index.js 运行脚本。然后,您就会看到设备的 IP 地址已被记录:
161.102.11.6您可以通过导航至https://www.whatismyip.com/ 来确保 IP 配置正确。您应该在两个地方看到相同的 IP。
从代理聚合器检索代理
获取代理的方法有很多,但最简单的方法之一是使用代理列表,该列表每五分钟更新一次,有许多可用的代理。在这种情况下,您可以使用GeoNode。浏览该网站,查看免费代理列表:

最好选择列表顶部的代理,因为它更有可能是新的。您需要注意的两栏是IP 地址和端口,因为您要用这两栏来配置您的代理。
复制并保存端口和主机(即IP 地址)信息。下一步配置代理时需要这些信息。
配置您的代理
获得代理详细信息后,就可以将这些信息添加到脚本中了。
您可以将代理的详细信息作为代理添加到您的请求中。代理本质上是一种管理网络电话连接的方式,可用于配置通过代理发出的请求。
要配置代理,需要根据上一步获取的参数以下列格式构建 URL: http://: 。
在index.js 中粘贴以下代码,更新代理主机和端口:
<code>import fetch from 'node-fetch'; import { HttpsProxyAgent } from 'https-proxy-agent';const scrape = async () => { // Configuring our proxy details const proxyHost = '43.134.32.184'; const proxyPort = 3128; const proxyConfig = `http://${proxyHost}:${proxyPort}`; const proxyAgent = new HttpsProxyAgent(proxyConfig); const url = 'https://ident.me/'; const response = await fetch(url, { agent: proxyAgent }); const text = await response.text(); console.log(text); }; scrape();
这段代码使用HttpsProxyAgent将代理配置添加到网络调用中。通过向获取传递代理参数,该HttpsProxyAgent可确保请求通过代理路由。
运行此代码后,您会看到您的代理 IP 已被记录:
43.134.32.184轮流使用代理服务器
使用代理的好处是为您的服务增加了一层抽象层。这种抽象可以确保您的真实 IP 不会被屏蔽,因为代理起到了中间人的作用。
但是,如果您使用代理服务器发出过多请求,其 IP 地址可能会被屏蔽。因此,您需要轮流使用代理服务器。
增加发出请求的代理服务器的数量,就更难识别和阻止您的刮擦尝试,从而减少丢失单个代理服务器的影响。添加多个代理服务器相对简单–你只需在代理服务器列表中重复添加代理服务器到数组中即可。您可以将代理服务器的主机名和所需端口存储在一个名为代理服务器的数组中。然后,您只需遍历数组,构建代理 URL,并从 URL 创建proxyAgent。
在节点获取网络请求中添加代理服务器,然后读取之前配置的 URL。看起来是这样的
<code>import fetch from 'node-fetch'; import { HttpsProxyAgent } from 'https-proxy-agent';const proxies = [ { host: '43.134.68.153', port: 3128 }, { host: '221.140.235.236', port: 5002 }, { host: '8.219.97.248', port: 80 }, ]; async function scrapeWithRotatingProxies(proxies, url) { for (const proxy of proxies) { try { const proxyConfig = `http://${proxy.host}:${proxy.port}`; const proxyAgent = new HttpsProxyAgent(proxyConfig); const response = await fetch(url, { agent: proxyAgent }); const text = await response.text(); console.log(text); } catch (err) { console.error(err); } } } const url = 'https://ident.me/ip'; await scrapeWithRotatingProxies(proxies, url);
你只需这样做,就能避免被屏蔽!
本教程的所有代码都可以在GitHub 代码库中找到。
结论
代理在网络搜索中至关重要。它们可以保护你的 IP 地址,让你规避地理封锁和其他限制。
在本文中,您将学习如何获取代理、配置 URL 以访问远程代理,以及如何将代理插入工作流以使用 Node Fetch 有效地进行搜刮。有了这些知识,你就可以轻松构建能在不被阻止的情况下进行搜刮的网络搜刮器。
常见问题
Node Fetch 是一个广泛使用的 npm 软件包,每周下载量约为 5300 万次。它是一个轻量级模块,将 Fetch API 移植到 Node.js 生态系统中,允许您直接从代码中发送 POST 数据、进行 GET 请求和删除内容。
不支持,尽管 Node Fetch 在网络搜刮等任务中很受欢迎,但它本身并不支持代理。要避免 IP 被屏蔽并使用 Node Fetch 的代理,您需要使用 https-proxy-agent 软件包。
您需要:
– 已安装 Node.js 14 或更新版本
– 使用 npm init 初始化的 Node.js 存储库
– 两个依赖项:https-proxy-agent 和 node-fetch
运行以下命令安装依赖项:
npm i https-proxy-agent
npm i node-fetch
此外,在 package.j 中添加 “type”:”module” 以使用 ES6 导入语法。
代理配置格式为:
http://<proxy-host>:<proxy-port>
对于验证代理:
http://<username>:<password>@<proxy-host>:<proxy-port>
基本代理设置包括:
1. 从 https-proxy-agent
导入 HttpsProxyAgent 2.创建带有主机和端口的代理配置 URL
3.使用代理配置创建新的 HttpsProxyAgent
4.传递代理参数以获取
示例:
const proxyConfig = `http://${proxyHost}:${proxyPort}`;
const proxyAgent = new HttpsProxyAgent(proxyConfig);
const response = await fetch(url, { agent: proxyAgent });
您可以从代理聚合器(如 GeoNode)上获取免费代理,该聚合器每五分钟更新一次代理列表。在代理表中查找 IP 地址和端口列。最好选择列表顶部的代理服务器,因为它们更有可能是新的并能正常工作。
您可以通过向 ident.me 提出请求来测试您的代理,ident.me 是一项回声 IP 地址的服务:
1. 在没有代理的情况下向 “https://ident.me/”提出请求 – 您将看到您的真实 IP
2.在配置了代理的情况下发出请求 – 你会看到代理的 IP
3.比较 IP 以验证代理是否正常工作
代理轮换很重要,因为如果使用单个代理服务器发出过多请求,其 IP 地址就会被屏蔽。轮流使用代理服务器可以增加服务的抽象性,确保您的真实 IP 不会被封。增加发出请求的代理服务器数量会使识别和阻止您的刮擦尝试变得更加困难。
要旋转代理:
1. 创建一个包含主机和端口的代理对象数组
2.为每个请求遍历数组
3. 为每个代理构建代理 URL
4.为每个请求创建一个新的 HttpsProxyAgent
5.使用 try-catch 优雅地处理失败
结构示例:
const proxies = [
{ host: ‘proxy1.com’, port: 3128 },
{ host: ‘proxy2.com’, port: 8080 }
];
for (const proxy of proxies) {
const proxyConfig = `http://${proxy.host}:${proxy.port}`;
const proxyAgent = new HttpsProxyAgent(proxyConfig);
const response = await fetch(url, { agent: proxyAgent });
}
使用 JavaScript 的随机选择功能从列表中选择代理:
1. 创建一个代理配置数组
2.使用 random.choice() 或类似方法选择一个代理
3.将选定的代理应用于您的请求
这样可以在代理池中随机分配流量,使检测更加困难。
使用 Node Fetch 的代理有以下几个好处:
– 保护您的 IP 地址不被封堵
– 绕过地理限制访问不同地区的内容
– 通过分发请求规避速率限制
– 为网络搜刮活动增加匿名层
– 减少丢失单个代理服务器的影响
Bright Data 是 Node Fetch 应用程序的优秀提供商,它提供可靠的代理服务器,具有正常运行时间长、身份验证简单、地理覆盖范围广等特点。他们的代理服务器可与 Node.js 应用程序无缝协作,并提供网络搜刮和数据收集任务所需的性能。
常见问题包括:
– 代理连接失败(代理服务器宕机或配置错误)
– 超时错误(代理响应时间过长)
– 身份验证错误(凭据不正确)
– 代理被阻止(IP 被目标网站禁止)
始终使用 try-catch 块实现错误处理,以便从容应对这些问题。
Leave a Comment
Required fields are marked *