使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

news2024/9/21 11:16:19

文章目录

  • 一、介绍?
  • 二、什么是 Puppeteer-Cluster?
  • 三、为什么代理在网络抓取中很重要?
  • 四、 为什么使用带代理的 Puppeteer-Cluster?
  • 五、分步指南: 带代理的 Puppeteer 群集
    • 5.1. 步骤 1:安装所需程序库
    • 5.2. 步骤 2. 获取并设置代理
    • 5.3. 步骤 3:使用代理身份验证设置 Puppeteer-Cluster
  • 六、使用 Puppeteer 群集和代理的最佳实践
  • 七、结论

一、介绍?

网络搜刮对于大规模收集数据至关重要,而 Puppeteer 是一种广泛使用的工具,用于自动执行网络搜刮等浏览器任务。不过,随着刮擦需求的增长,你需要高效地管理多个浏览器实例,同时避免 IP 禁止。这就是 Puppeteer-Cluster 和代理发挥作用的地方。

在本博客中,我们将探讨如何使用 Puppeteer-Cluster 扩展网络刮擦,同时集成代理服务器以避免检测并提高刮擦性能。此外,我们还将逐步介绍如何使用特定凭证集成代理服务器。

二、什么是 Puppeteer-Cluster?

Puppeteer-Cluster 是一个开源库,旨在通过并发运行多个无头浏览器实例来扩展 Puppeteer 的功能。它能处理任务队列、重试和并发,使大规模刮擦更易于管理和高效。

Puppeteer-Cluster 的主要功能包括

并发性: 并行运行多个浏览器实例,提高搜索任务的速度和效率。
任务调度: 自动处理任务调度,防止资源过载。
重试和错误处理: 如果页面加载失败,Puppeteer-Cluster 可重试任务,提高可靠性。
优化资源使用: 通过管理浏览器会话,Puppeteer-Cluster 可减少内存和 CPU 开销。

这些功能使 Puppeteer-Cluster 成为管理大型刮擦操作(需要同时刮擦多个页面)的高效工具。

三、为什么代理在网络抓取中很重要?

网站通常会对进入的流量进行监控,以检测和阻止机器人,尤其是当许多请求来自同一个 IP 地址时。这时,代理服务器就能派上用场。代理服务器通过充当中间人来掩盖你的真实 IP,允许你在不同的 IP 地址之间轮换。

以下是代理的主要类型:

动态住宅代理:分配给真正房主的 IP 地址。它们非常可靠,难以屏蔽,但价格较高。
数据中心代理: 速度快、成本低,但与住宅代理相比更容易被发现和拦截。
静态住宅(ISP) 代理: 介于住宅代理和数据中心代理之间,速度快,可靠性高,不易被发现。

使用代理可以:

轮换 IP 地址,避免被屏蔽。
绕过地理限制,访问特定地区的内容。
保持匿名性,因为每个请求看起来都来自不同的用户。

四、 为什么使用带代理的 Puppeteer-Cluster?

虽然 Puppeteer-Cluster 可以同时运行多个浏览器,但添加代理后,每个浏览器实例都可以从不同的 IP 地址发出请求。这有助于防止检测,避免速率限制,并能搜刮受地域限制的内容。使用带有代理服务器的 Puppeteer-Cluster,不仅能确保刮擦基础架构的可扩展性,还能确保其稳健性。

在 Puppeteer-Cluster 中使用代理的一些好处:
降低封禁风险:通过使用代理,每个请求看起来都来自不同的 IP,使网站更难检测和封禁您的刮擦器。
绕过地理限制: 代理允许您从可能受地理位置限制的网站上抓取内容。
增强可扩展性: 将代理服务器与 Puppeteer-Cluster 结合使用,可以同时运行大量搜刮任务,而不会触及速率限制。

五、分步指南: 带代理的 Puppeteer 群集

在本节中,我们将介绍如何设置 Puppeteer-Cluster,并将其配置为使用带身份验证的代理。开始之前,请确保您的系统已安装 Node.js。

5.1. 步骤 1:安装所需程序库

首先,为你的项目创建一个新文件夹,如 “puppeteer-project”。然后,打开命令提示符(Windows)或终端(macOS、Linux),使用命令 “cd ”导航到该文件夹,并在后面跟上文件夹的目录路径。然后,运行此命令创建 package.json 文件,该文件记录了项目所需的库:

npm init -y

接下来,安装 Puppeteer、Puppeteer-Cluster 和 ProxyChain(用于代理管理):

npm install puppeteer puppeteer-cluster proxy-chain

5.2. 步骤 2. 获取并设置代理

  1. 注册 Smartdaili 面板。
    在这里插入图片描述
  2. 在右侧菜单栏中选择符合您需求的代理类型。
    在这里插入图片描述
  3. 选择适合您需要的代理和计划。
  4. 打开代理设置选项卡。

在这里插入图片描述
5. 导航到下面的端点生成器。
6. 配置参数。设置身份验证方法、位置、会话类型和协议。
7. 选择要生成的代理端点数量(默认值 -10)。
8. 点击复制按钮,复制端点。

5.3. 步骤 3:使用代理身份验证设置 Puppeteer-Cluster

在项目文件夹中新建一个名为 “index.js ”的文件。将下面的 JavaScript 代码插入 “index.js ”文件,以便将代理凭据与 Puppeteer-Cluster 集成:

const { Cluster } = require('puppeteer-cluster');
const ProxyChain = require('proxy-chain');

(async () => {
    // Proxy details
    const proxyUrl = 'http://username:password@gate.visitxiangtan.com:10001';

    // Create an anonymized proxy URL using ProxyChain to strip the credentials
    const newProxyUrl = await ProxyChain.anonymizeProxy(proxyUrl);

    // Initialize Puppeteer-Cluster
    const cluster = await Cluster.launch({
        concurrency: Cluster.CONCURRENCY_CONTEXT,
        maxConcurrency: 5,  // Number of concurrent browser instances
        puppeteerOptions: {
            headless: true,
            args: [`--proxy-server=${newProxyUrl}`],  // Set proxy for each browser instance
        },
    });

    // Define the task for each browser instance
    await cluster.task(async ({ page, data: url }) => {
        try {
            // Set proxy authentication
            await page.authenticate({
                username: 'username',
                password: 'password',
            });

            // Navigate to the URL
            await page.goto(url, { waitUntil: 'domcontentloaded' });

            // Extract and log page content (or other data as needed)
            const content = await page.content();
            console.log(`Content from ${url}: \n`, content);

        } catch (error) {
            console.error(`Error scraping ${url}:`, error);
        }
    });

    // Queue tasks for Puppeteer-Cluster
    await cluster.queue('https://ip.smartdaili-china.com/json');
    await cluster.queue('https://example.com');  // You can add more URLs here

    // Wait for tasks to finish
    await cluster.idle();
    await cluster.close();
})();

代码解释:

  1. 代理设置

将 “http://username:password @gate.visitxiangtan.com:10001 ”替换为包含用户名和密码的代理服务器 URL。
在“//设置代理身份验证 ”下面,将用户名和密码替换为实际代理凭证。

  1. 并发性: 我们将 Puppeteer-Cluster 配置为最多同时运行 5 个浏览器实例。你可以根据系统资源情况增减。
  2. 任务: 集群中的每个浏览器实例将访问不同的 URL,确保高效的多任务处理。
  3. 匿名代理: 我们使用 “ProxyChain.anonymizeProxy() ”函数,在将代理 URL 传递给 Puppeteer 之前,从代理 URL 中剥离凭据。这可确保代理在刮擦过程中保持匿名。

要在命令提示符或终端中运行代码,请使用以下命令:

node index.js

然后,脚本将执行并输出指定 URL 的内容。

六、使用 Puppeteer 群集和代理的最佳实践

定期轮换代理服务器: 确保您的代理服务器经常轮换,以避免被反窃听措施检测到。
尊重网站政策: 始终遵守网站的 robots.txt 文件和服务条款,避免出现法律或道德问题。
节流请求: 在请求之间添加一个小延迟,有助于避免触发反僵尸保护措施。一般来说,500 毫秒至 1 秒的延迟是安全的。
处理验证码: 许多网站在检测刮擦活动时都会使用验证码。使用验证码解决服务或谨慎限制请求速度有助于绕过这些挑战。

七、结论

Puppeteer-Cluster 搭配代理服务器,为可扩展的高效网络搜索提供了强大的解决方案。Puppeteer-Cluster 能够同时运行多个浏览器实例,而代理服务器则能屏蔽 IP 地址并避免限制,这为你提供了执行大规模网络搜索任务所需的工具。

按照本指南中概述的步骤,你可以用代理身份验证设置 Puppeteer-Cluster,这样你就可以同时从多个网站搜刮数据,而不必担心被屏蔽。这种组合可确保你的刮擦操作保持快速、高效和不被发现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光耦知识分享 | 可控硅光耦的行业应用及封装形式

可控硅光耦(SCR Optocoupler)是一种特殊类型的光耦,通常由红外发光二极管(LED)和双向可控硅(SCR)组成,用于实现输入和输出之间的电气隔离和信号传输。能够以最少的外部元器件数控制大…

Postman如何测试WebSocket接口!

01、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直…

网通产品硬件设计工程师:百兆商业级网络隔离变压器有哪些选择呢?

Hqst盈盛(华强盛)电子导读:今天分享的是网通设备有关工程师产品设计时可供选择的几款百兆商业级网络隔离变压器... 下面我们就一起来看看网通设备有关工程师产品设计时可供选择的几款百兆商业级网络隔离变压器,让您的产品创新在成…

鸿蒙OpenHarmony【轻量系统内核通信机制(互斥锁)】子系统开发

互斥锁 基本概念 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种,开锁或闭锁。当任务持有互斥锁时,该互斥锁处于闭锁状态,这个任务获得该互斥锁…

从虚拟机安装CentOS到自定义Dockerfile构建tomcat镜像

写在开头 整个过程中涉及的三方软件均来源于三方的官网,因此需要有一个稳定良好的访问公网网络的环境,可能需要科学上网 下载并安装 VMware Workstation Player 下载 需要先注册登录:https://login.broadcom.com/signin 下载页面&#xff1a…

【IoTDB 线上小课 07】多类写入接口,快速易懂的“说明书”!

【IoTDB 视频小课】稳定更新中!第七期来啦~ 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟,我们讲给你听: 一条视频了解写入接口 了解我们的友友们,应该…

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色…

Observability:构建下一代托管接入服务

作者:来自 Elastic Vishal Raj, Marc Lopez Rubio 随着无服务器(serverless)的引入,向 Elastic Cloud 发送可观察性数据变得越来越容易。你可以在 Elastic Cloud Serverless 中创建一个可观察性无服务器项目,并将可观察…

Netty对处理粘包和半包的支持

Netty基本介绍,参考 Netty与网络编程 1.1 什么是粘包拆包 例如:发送 ABC, DEF两个报文 收到ABCDEF一个报文,发生了粘包 收到AB,C,DEF三个报文,ABC发生了拆包 收到AB,CD&#xff…

SQL server学习01-SQL server环境配置

目录 一,手动下载及安装 microsoft .net framework 3.5 1,下载 2,安装 二,安装SQL server2014 1,下载 2,安装 3,启动SQL server服务 三,下载及安装Microsoft SQL Server…

2024华为杯研赛E题保姆级教程思路分析

E题题目:高速公路应急车道紧急启用模型 今年的E题设计到图像/视频处理,实际上,E题的难度相对来说较低,大家不用畏惧视频的处理,被这个吓到。实际上,这个不难,解决了视频的处理问题,…

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

低代码引擎使能开发者定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低代码平台。适用于多场景的低代码平台开发&#xff…

周末愉快!——周复盘

加班的晚上有一个美梦! 周末愉快简单复盘结尾 精华: 在这个信息爆炸的时代,我们的大脑每天都被无数的数据和刺激充斥,以至于我们常常感到应接不暇。然而,正如古人所言:“不飞则已,一飞冲天”&am…

物联网关组态应用案例

产品简介 拓扑未来物联网关是高集成度的物联网采集及通信装置,支持通过RS485串口以太网口进行数据采集,支持数据缓存、协议解析、边缘计算,Ethernet/4G/WIFI数据传输和接入云端平台。支持采集PLC、传感器、仪器仪表和各种控制器,…

MySQL的索引——提高查找算法的数据结构 B+树

我们MYSQL服务器是在内存中的,所以所有的操作也是内存级的,索引也是如此 我们要提高算法的效率:首先要用一个好的数据存储结构储存数据,然后结构决定算法 所以——索引的本质就是一种提高算法效率组织的数据结构 缩印的主要价值体…

【华为杯】2024数学建模研赛题目

2024数学建模研赛题目已经发布 各个赛题题目如下: A题 B题 C题 D题 E题 F题 赛题完整版在文末,点击下方名片。

【操作系统】01.冯·诺伊曼体系结构

上面这张图就是我们经常能在各种教材中看到的冯诺伊曼体系结构。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 一、认识设备 输入设备: 键盘、鼠标、网卡、磁盘、摄像头…… 输出设备&a…

Java8 中一个极其强悍的新接口,很多人没用过

在开发过程中经常会使用​​if...else...​​​进行判断抛出异常、分支处理等操作。这些​​if...else...​​​充斥在代码中严重影响了代码代码的美观,这时我们可以利用Java 8的Function接口来消灭​​if...else...​​。 if (...){throw new RuntimeException(&qu…

深入Android UI开发:从自定义View到高级布局技巧的全面学习资料

在Android开发的世界中,UI设计和实现是吸引用户的关键。本文将为您介绍一套全面的Android UI开发学习资料,包括详细的学习大纲、PDF文档、源代码以及配套视频教程,旨在帮助您从自定义View到高级布局技巧,全面提升您的UI开发技能。…

深度学习-从零基础快速入门到项目实践,这本书上市了!!!

此书地址: 《【2024新书】深度学习 从零基础快速入门到项目实践 文青山 跟我一起学人工智能 机器学习算法原理代码实现教程 深度学习项目分析 深度学习 从零基础快速入门到项目实践》【摘要 书评 试读】- 京东图书 除深度学习外我还写了一本软件测试书。我大概是国…