使用 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.xdnf.cn/news/145409.html

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

相关文章

基于 ROS 的Terraform托管服务轻松部署ChatGLM2-6B

介绍 ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础上,ChatGLM2-6B具有更强大的性能、更长的上下文、更高效的推理等特性。 资源编排服务(Resource Orchestration…

C++入门 之 类和对象(下)

目录 一、初始化列表 二、隐式类型转换与explict 三、静态成员——static 四、友元 五、内部类 六、匿名对象 七.对象拷贝时的编译器优化 一、初始化列表 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式&…

闯关leetcode——66. Plus One

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/plus-one/description/ 内容 You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from mo…

pdf文件怎么直接翻译?使用这些工具让翻译变得简单

在全球化日益加深的职场环境中,处理外语PDF文件成为了许多职场人士面临的共同挑战。 面对这些“加密”的信息宝库,如何高效、准确地将英文pdf翻译成对应语言,成为了提升工作效率的关键。 以下是几款在PDF翻译领域表现出色的软件&#xff0c…

基于 UniApp 平台的学生闲置物品售卖小程序设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

寄存器二分频电路

verilog代码 module div2_clk ( input clk, input rst,output clk_div);reg clk_div_r; assign clk_div clk_div_r;always(posedge clk) beginif(rst)beginclk_div_r < 1b0;endelsebeginclk_di…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据&#xff0c;检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》

近日&#xff0c;全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape&#xff1a;中国数据安全技术发展路线图&#xff0c;2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用&#xff0c;被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出&#xff0c;数据安…

Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案

GB28181协议凭借其在安防流媒体行业独有的大统一地位&#xff0c;目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准&#xff0c;目前基本所有厂家的安防摄像头…

Netty源码解析-请求处理与多路复用

Netty基本介绍&#xff0c;参考 Netty与网络编程 摘要 Netty源码系列-NioEventLoop 1.1 Netty给Channel分配Nio Event Loop的规则 看下图&#xff0c;EventLoopGroup是线程组&#xff0c;每个EventLoop是一个线程&#xff0c;那么线程处理请求是怎么分配的呢&#xff1f;我…

Docker 以外置数据库方式部署禅道

2.安装步骤 2.1.参考资料 禅道官网文档: https://www.zentao.net/book/zentaopms/docker-1111.html https://www.zentao.net/book/zentaopms/405.html 2.2.详细步骤 ssh 登录服务器创建目录 /opt/zentao /opt/zentao/data /opt/zentao/db cd /opt mkdir zentao mkdir zentao…

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量…

java -versionbash:/usr/lib/jvm/jdk1.8.0_162/bin/java:无法执行二进制文件:可执行文件格式错误

实验环境&#xff1a;Apple M1在VMwareFusion使用Utubun Jdk文件错误 &#xfffc; 尝试&#xff1a; 1、重新在网盘下载java1.8 2、在终端通过命令下载 3、确保 JDK 正确安装在系统中&#xff0c;可以通过 echo $JAVA_HOME 检查 JAVA_HOME 环境变量是否设置正确。 &#xfff…

十种果冻的做法

菠萝果冻 1.在菠萝的1/5处切开&#xff0c;切去顶做盖子用&#xff0c;用水果刀在四周划一圈使皮和果肉分离 2.注意底部切透了&#xff0c;用水果刀把菠萝肉挖出&#xff0c;菠萝肉切丁用盐水浸泡备用 3.把菠萝丁放入料理机中加入少许纯净水&#xff0c;打成菠萝汁备用 4.打好…

【学习笔记】数据结构(六 ②)

树和二叉树&#xff08;二&#xff09; 文章目录 树和二叉树&#xff08;二&#xff09;6.3.2 线索二叉树 6.4 树和森林6.4.1 树的存储结构6.4.2 森林与二叉树的转换6.4.3 树和森林的遍历 6.5 树与等价问题6.5.1 等价定义6.5.2 划分等价类的方法6.5.3 划分等价类的具体操作 - 并…

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

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

[Linux]Vi和Vim编辑器

Vi和Vim编辑器 Linux系统会内置vi文本编辑器, 类似于windows中的记事本 Vim具有程序编辑的能力, 可以看作是Vi的增强版本, 可以进行语法检查, 代码补全,代码编译和错误调整等功能 Vi和Vim的模式 快速入门 使用vim开发一个Hello.java程序 通过Xshell连接Linux系统命令行输入…

XML:DOM4j解析XML

XML简介&#xff1a; 什么是XML&#xff1a;XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据&#xff0c;而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情&#xff0c;XML被设计用来结构化、存储以及传输信息。 XML可以发明…

企业内网安全

企业内网安全 1.安全域2.终端安全3.网络安全网络入侵检测系统异常访问检测系统隐蔽信道检测系统 4.服务器安全基础安全配置入侵防护检测 5.重点应用安全活动目录邮件系统VPN堡垒机 6.蜜罐体系建设蜜域名蜜网站蜜端口蜜服务蜜库蜜表蜜文件全民皆兵 1.安全域 企业出于不同安全防…

[备忘]测算.net中对象所占用的内存

.net 基础库中应该是没有直接提供计算某个对象所占内存的方法。简单查了下&#xff0c;找到几种方式&#xff1a; 1、运行态用工具进行内存分析 比如&#xff0c;微软这篇教程中有介绍。《使用 .NET 对象分配工具分析内存使用情况》https://learn.microsoft.com/zh-cn/visuals…