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

文章目录

  • 一、介绍?
  • 二、什么是 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 detailsconst proxyUrl = 'http://username:password@gate.visitxiangtan.com:10001';// Create an anonymized proxy URL using ProxyChain to strip the credentialsconst newProxyUrl = await ProxyChain.anonymizeProxy(proxyUrl);// Initialize Puppeteer-Clusterconst cluster = await Cluster.launch({concurrency: Cluster.CONCURRENCY_CONTEXT,maxConcurrency: 5,  // Number of concurrent browser instancespuppeteerOptions: {headless: true,args: [`--proxy-server=${newProxyUrl}`],  // Set proxy for each browser instance},});// Define the task for each browser instanceawait cluster.task(async ({ page, data: url }) => {try {// Set proxy authenticationawait page.authenticate({username: 'username',password: 'password',});// Navigate to the URLawait 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-Clusterawait cluster.queue('https://ip.smartdaili-china.com/json');await cluster.queue('https://example.com');  // You can add more URLs here// Wait for tasks to finishawait 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.mzph.cn/web/53799.shtml

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

相关文章

Vue(15)——组合式API②

生命周期函数 选项式组合式beforeCreate/createdsetupbeforeMountonBeforeMount mountedonMounedbeforeUpdateonBeforeUpdateupdatedonUpdatedbeforeUnmountonBeforeUnmountunmountedonUnmounted 父子通信 父传子基本思想: 父组件中给子组件绑定属性…

【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划

文章目录 0. 前言1. 基于搜索的路径规划1.1 A* 算法1.2 Hybrid A* 算法 2. 基于采样的路径规划2.1 Frent Frame方法2.2 Cartesian →Frent 1D ( x , y ) (x, y) (x,y) —> ( s , l ) (s, l) (s,l)2.3 Cartesian →Frent 3D2.4 贝尔曼Bellman最优性原理2.5 高速轨迹采样——…

部署wordpress项目

一、先部署mariadb 二、在远程登录工具上进行登录测试,端口号为30117,用户为 root,密码为123 三、使用测试工具: [rootk8s-master aaa]# kubectl exec -it pods/cluster-test0-58689d5d5d-7c49r -- bash 四、部署wordpress [root…

计算机网络:概述 --- 体系结构

目录 一. 体系结构总览 1.1 OSI七层协议体系结构 1.2 TCP/IP四层(或五层)模型结构 二. 数据传输过程 2.1 同网段传输 2.2 跨网段传输 三. 体系结构相关概念 3.1 实体 3.2 协议 3.3 服务 这里我们专门来讲一下计算机网络中的体系结构。其实我们之前…

当大语言模型应用到教育领域时会有什么火花出现?

当大语言模型应用到教育领域时会有什么火花出现? LLM Education会出现哪些机遇与挑战? 今天笔者分享一篇来自New York University大学的研究论文,另外一篇则是来自Michigan State University与浙江师范大学的研究论文,希望对这个话题感兴趣…

GPT理论

1.GPT发展 Transformer是一个用作翻译任务的模型,谷歌出品。 GPT全称 lmproving Language Understanding by Generative Pre-Training,用预训练语言理解模型。OPENAI出品。 BERT全称Pre-training of Deep BidirectionalTransformers for Language Unde…

关于Cursor使用的小白第一视角

最近看破局感觉洋哥总是提到cursor,感觉好火,所以打算学习一下怎么用Cursor,如果可以希望能做一个我自己的网站。 之前从来没用过Cursor。所以,这是一篇小白视角的Cursor使用教程。 如果你也是一个小白,并且对Cursor…

中国空间计算产业链发展分析

2024中国空间计算产业链拆解 空间计算设备主要包括AR、VR、MR等终端设备。VR设备通常包括头戴式显示器(VR头盔)、手柄或追踪器等组件,用以完全封闭用户视野,营造虚拟环境体验。这些设备配备高分辨率显示屏、内置传感器和跟踪器。 …

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有:1. 会引起其底层空间改变的操作,都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下,g编译器对迭代器失效的检测并不是非常…

ArduSub程序学习(11)--EKF实现逻辑①

1.read_AHRS() 进入EKF,路径ArduSub.cpp里面的fast_loop()里面的read_AHRS(); //从 AHRS(姿态与航向参考系统)中读取并更新与飞行器姿态有关的信息 void Sub::read_AHRS() {// Perform IMU calculations and get attitude info//----------…

优化iOS日志管理:构建高效的日志体系

引言 在现代应用程序开发中,日志记录不仅仅是调试工具,它也是性能监控和安全审计的关键组成部分。有效的日志管理能够帮助开发者快速识别和理解问题,同时提供系统运行状态的深刻洞察。在这篇博客中,我们将深入讨论日志的重要性&a…

C++模拟实现list:list、list类的初始化和尾插、list的迭代器的基本实现、list的完整实现、测试、整个list类等的介绍

文章目录 前言一、list二、list类的初始化和尾插三、list的迭代器的基本实现四、list的完整实现五、测试六、整个list类总结 前言 C模拟实现list:list、list类的初始化和尾插、list的迭代器的基本实现、list的完整实现、测试、整个list类等的介绍 一、list list本…

影响6个时序Baselines模型的代码Bug

前言 我是从去年年底开始入门时间序列研究,但直到最近我读FITS这篇文章的代码时,才发现从去年12月25号就有人发现了数个时间序列Baseline的代码Bug。如果你已经知道这个Bug了,那可以忽略本文~ 这个错误最初在Informer&#xff0…

web入门

什么是spring 特点:配置繁琐,入门难度大,提出了springboot 1.springbootweb入门例子 2.http协议 2.1概述 2.2请求协议 由三部分组成:请求行、请求头、请求体 2.3响应协议 2.4协议解析

云桌面+数字人:开启直播新纪元

随着科技的飞速发展,直播行业也在不断变革。云桌面和数字人直播作为新兴力量,正逐渐崭露头角,受到了广泛关注。 云桌面技术的出现,为直播带来了全新的可能性。它不再依赖传统的本地硬件设备,而是通过云计算提供弹性可…

我与Linux的爱恋:命令行参数|环境变量

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…

C++map与set

文章目录 前言一、map和set基础知识二、set与map使用示例1.set去重操作2.map字典统计 总结 前言 本章主要介绍map和set的基本知识与用法。 一、map和set基础知识 map与set属于STL的一部分,他们底层都是是同红黑树来实现的。 ①set常见用途是去重 ,set不…

数据技术进化史:从数据仓库到数据中台再到数据飞轮的旅程

随着大数据时代的到来,数据已经成为企业的核心资产之一。在过去几十年间,数据技术也随之不断演进,从早期的数据仓库到近年来热门的数据中台,再到正在快速发展的数据飞轮概念,每一步都是技术革新的体现。 一、数据仓库&…

电商跨境电商商城系统/网上商城接口/电商数据接口详情

电商API接口背景:电商运营中,数据分析这项工作越来越重要,许多品牌方也越来越热衷去做电商数据分析。不过,全面的数据该如何获取呢,此时,电商数据接口的重要性便凸显出来了。 电商API数据接口主要有以下特…

外包干了两年,收获真不少...

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…