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

devtools/2024/9/25 6:59:46/

文章目录

  • 一、介绍?
  • 二、什么是 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.ppmy.cn/devtools/116847.html

相关文章

开箱元宇宙| 探索 Great Entertainment Group 如何利用 Web3 和数字创新重新定义活动体验

有没有想过 Web3 等尖端技术是如何改变娱乐行业的?在本期「开箱元宇宙」系列中,我们与 Great Entertainment Group (GEG) 的 Web3 顾问 Rob Lacey 深度访谈,探讨这家充满活力的公司如何在其活动中开拓数字创新。 与我们一起揭示 GEG 如何将 …

git eslint扩展,解决git提交因为空格差异而报错

项目场景: 在前端项目开发中,经常会使用eslint,这个方法的好处就是严格要求代码格式。让代码更为严谨。 问题描述 以为eslint格式过于严谨,在git提交的时候,经常会因为一个多了一个空格导致代码提交失败。 原因分析:…

Spring Boot 学习和使用

文章目录 前言一、Spring Boot简介二、核心特性三、核心注解四、快速入门五、学习资源总结前言 Spring Boot是一款开源的Java Web应用框架,旨在简化Spring应用的初始搭建以及开发过程。以下是Spring Boot入门的详细介绍: 一、Spring Boot简介 Spring Boot通过整合Spring技术…

EtherCAT转Profient协议网关简述

Profinet 转 EtherCAT 的连接与通信问题一直是许多人关注的焦点,也常常给人们带来诸多困惑。在此,我们将深入剖析这一问题,并为大家提供切实可行的解决方案。WL-PN-ECATM型设备在这方面表现卓越,能够有效解决这一难题。接下来&…

傅里叶变换及其应用笔记

傅里叶变换 预备知识学习路线扼要描述两者之间的共同点:线性运算周期性现象对称性与周期性的关系周期性 预备知识 学习路线 从傅里叶级数,过度到傅里叶变换 扼要描述 傅里叶级数(Fourier series),几乎等同于周期性…

GEE数据集:基于Sentinel-1和Sentinel-2进行的POPCorn可扩展人口地图

目录 简介 代码 代码链接 应用APP 引用 网址推荐 0代码在线构建地图应用 机器学习 基于Sentinel-1和Sentinel-2进行的POPCorn可扩展人口地图 简介 Popcorn(人口普查数据)是一种人口测绘方法,旨在解决绘制精确人口地图的难题,尤其是在数据稀缺的地区。 Popcorn 仅…

HTML5好看的水果蔬菜在线商城网站源码系列模板2

文章目录 1.设计来源1.1 主界面1.2 商品列表界面1.3 商品详情界面1.4 其他界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/142059220 HTML5好看的水果蔬菜在线商城…

Linux usb mass-storage 阅读

usb core:实现核心的功能,为别的设备驱动程序提供服务,比如申请内存,比如实现一些所有设备都会需要的公共的函数,初始化整个usb系统,初始化root_hub usb host 控制器:控制所有的usb设备的通信,CPU不是直接和usb设备通信,而是和控制器通信,CPU要对设备做什么动作,它会…