Skip to content
Intermediate / 2 min read

如何在 Linux 上使用 Dataimpulse 住宅代理与 Puppeteer 进行网页抓取

了解如何在 Linux 上将 Dataimpulse 住宅代理与 Puppeteer 集成,以实现可靠的大规模网页抓取。本分步指南涵盖安装、身份验证和 IP 轮换。

Linux HTTP(S) 网页抓取

概述

Puppeteer 是一个 Node.js 库,提供高级 API 来控制无头 Chrome 或 Chromium。在大规模抓取时,使用像 Dataimpulse 这样的住宅代理有助于避免 IP 封禁和速率限制。本教程向你展示如何在 Linux 系统上配置 Puppeteer,让流量通过 Dataimpulse 住宅代理路由。我们将涵盖 HTTP 代理身份验证、测试和基本轮换。

先决条件

在开始之前,请确保你具备:

  • 一台 Linux 机器(Ubuntu 20.04+ 或类似版本)。
  • 已安装 Node.js 14+ 和 npm。
  • 一个具有住宅代理凭据(用户名、密码、端点、端口)的 Dataimpulse 账户。你可以在 Dataimpulse 网站 上注册按量付费计划。
  • 基本熟悉命令行和 JavaScript。

步骤 1:在 Linux 上安装 Node.js 和 Puppeteer

首先,更新你的软件包列表,并安装 Node.js(如果尚未安装)。

sudo apt update
sudo apt install -y nodejs npm

验证安装:

node --version
npm --version

创建一个新的项目目录并初始化:

mkdir puppeteer-dataimpulse
cd puppeteer-dataimpulse
npm init -y

安装 Puppeteer:

npm install puppeteer

注意:Puppeteer 默认会下载兼容的 Chromium 二进制文件。在 Linux 上,你可能需要安装额外的依赖项。如果遇到缺少库的情况,请安装它们:

sudo apt install -y libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libasound2 libatk1.0-0 libatk-bridge2.0-0 libgtk-3-0

步骤 2:获取 Dataimpulse 代理凭据

登录你的 Dataimpulse 仪表板,找到你的住宅代理凭据。你需要:

  • 代理主机(Dataimpulse 提供的端点)
  • 端口(例如,HTTP 为 823,SOCKS5 为 824)
  • 用于身份验证的用户名和密码

Dataimpulse 默认使用单个端点和轮换 IP。在本教程中,我们将使用 HTTP 端点。请将下方代码中的占位符替换为你的实际凭据。

步骤 3:配置 Puppeteer 使用代理

创建一个名为 scrape.js 的新文件,并添加以下代码,以使用 Dataimpulse 代理启动 Puppeteer。

const puppeteer = require('puppeteer');

(async () => {
  const proxyHost = 'your-proxy-host.dataimpulse.com'; // 替换为你的主机
  const proxyPort = 823; // 替换为你的端口
  const proxyUser = 'your_username';
  const proxyPass = 'your_password';

  const browser = await puppeteer.launch({
    headless: true, // 或设置为 false 进行调试
    args: [
      `--proxy-server=http://${proxyHost}:${proxyPort}`,
      '--no-sandbox',
      '--disable-setuid-sandbox'
    ]
  });

  const page = await browser.newPage();

  // 使用代理进行身份验证
  await page.authenticate({
    username: proxyUser,
    password: proxyPass
  });

  // 导航到测试页面以验证 IP
  await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });

  // 提取 IP 地址
  const ipInfo = await page.evaluate(() => document.body.innerText);
  console.log('Your IP address:', ipInfo);

  await browser.close();
})();

运行脚本:

node scrape.js

如果成功,你将看到一个不同于你本地 IP 的地址,它属于 Dataimpulse 的 IP 池。

步骤 4:处理代理身份验证

Puppeteer 的 page.authenticate() 方法适用于 HTTP 代理。但是,如果你使用 SOCKS5 代理,Puppeteer 不直接支持 SOCKS5 身份验证。在这种情况下,你可能需要使用本地代理转换器,如 gost 或 proxychains。本教程中,我们重点介绍 HTTP 代理。

如果你更愿意将凭据嵌入代理 URL(某些配置允许),可以尝试:

args: [
  `--proxy-server=http://${proxyUser}:${proxyPass}@${proxyHost}:${proxyPort}`
]

但请注意,出于安全原因,Chrome 可能不接受 URL 中的凭据。page.authenticate() 方法更可靠。

步骤 5:测试代理连接

为确保你的请求通过代理并且 IP 正在轮换,你可以多次运行脚本。每次运行应返回不同的 IP 地址。

for i in {1..3}; do node scrape.js; done

你应该看到三个不同的 IP。这确认轮换正在工作。

步骤 6:实现 IP 轮换和会话控制(可选)

Dataimpulse 允许你通过在用户名中使用会话标识符来控制轮换。具体语法各不相同,因此请参考你的 Dataimpulse 仪表板或文档以获取正确格式。通常,你可以在用户名后附加会话 ID,以便在多个请求中保持相同的 IP,或者省略它以在每次请求时轮换。

在 Puppeteer 中,你可以为每个浏览器实例动态设置用户名。例如,如果你想要粘性会话,可以使用:

const sessionId = 'abc123'; // 替换为你的会话 ID
const proxyUser = `your_username-session-${sessionId}`;

这让你可以为抓取任务维持粘性会话,这对于跟踪会话的网站可能很有用。

故障排除

  • 身份验证错误:确保你的用户名和密码正确。如果使用特殊字符,请对它们进行 URL 编码。
  • 连接超时:检查你的防火墙设置,并确保代理端口未被阻止。如果可用,请尝试其他端口。
  • Puppeteer 启动失败:安装缺失的依赖项。运行 ldd chrome | grep not found 来查找缺失的库(Chrome 的路径可能不同)。
  • 代理未轮换:验证你没有使用粘性会话用户名。如果未指定会话,每个请求应获得一个新 IP。
  • SSL 错误:某些网站可能拒绝代理。尝试在 args 中添加 --ignore-certificate-errors 进行测试(不推荐用于生产环境)。

总结

在本教程中,你学习了如何在 Linux 上将 Dataimpulse 住宅代理与 Puppeteer 集成。你安装了 Puppeteer,配置了代理身份验证,测试了 IP 轮换,并探索了会话控制。此设置通过将请求分布到 9000 万+ 住宅 IP 上,实现可靠的大规模网页抓取。请记住遵守网站服务条款和 robots.txt。对于其他抓取工具,相同的代理凭据可用于任何 HTTP 客户端。