如何在云端使用 Browserless 进行网页抓取?

云浏览器是什么?

云浏览器是一种基于云的组合,它将网页浏览器应用程序与一个虚拟化的容器相结合,实现了远程浏览器隔离的概念。开发人员可以使用流行的工具(如 Playwright 和​ Puppeteer​)来自动化网页浏览器,用于网页抓取和网页测试。

云浏览器在安全容器中执行来自网络的命令,该容器与用户端点分离,并通过远程显示协议访问。因此,浏览器应用程序更加集中、易于管理、更具成本效益、可扩展性和保护性。

为什么使用 Browserless 进行抓取?

Browserless 是一种功能强大的基于云的解决方案,可实现无缝的浏览器自动化、网页抓取和测试。Browserless 的主要目标是简化和扩展网页浏览器自动化任务(如测试和抓取),这可以通过以下两种方式实现:

  • 在Docker 或 Kubernetes上运行多个浏览器实例。
  • 使用现有的 Web 驱动程序代理服务器,如 Selenium Grid。

如何在云中使用 Browserless 进行网页抓取?

第 1 步:准备

在我们开始之前,我们需要拥有 Browserless 服务。使用 Browserless 可以解决复杂的网页爬取和大型自动化任务,并且它现在已经实现了完全托管的云部署。

Browserless 采用以浏览器为中心的 подход,提供强大的无头部署功能,并提供更高的性能和可靠性。有关 Browserless 的更多信息,您可以 获取文档 了解更多。

获取 API 密钥 并转到 Nstbrowser 客户端的 Browserless 菜单页面,或者您可以转到 Nstbrowser 客户端进行访问

第 2 步:确认抓取目标

在我们开始之前,我们需要确保我们要抓取的内容。在以下示例中,我们尝试抓取 IMDb 前 250 名电影中的电影标题。打开页面后:

  1. 等待页面正常加载,并将页面定位到 IMDb 前 250 名电影中的电影标题
  2. 打开调试控制台并识别电影标题的 html 元素
  3. 使用您喜欢的库获取电影标题

 

第 3 步:开始抓取

一切准备就绪,开始抓取!我们选择使用 Nstbrowser 提供的功能强大的云 Browserless 来抓取上述内容。下面我们将列出一些常用的库。

Puppeteer

如果您还没有选择库,我们强烈推荐 Puppeteer,因为它非常活跃,并且有许多维护者。它也是由 Chrome 开发人员构建的,因此它是最优质的库之一。

  • 安装 puppeteer-core
# pnpm
pnpm i puppeteer-core
# yarn
yarn add puppeteer-core
# npm
npm i --save puppeteer-core
  • 代码脚本
import puppeteer from "puppeteer-core";const token = "您的 api 密钥"; // '您的代理'const config = {proxy: '您的代理', // 必需;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080// platform: 'windows', // 支持:windows, mac, linux// kernel: 'chromium', // 仅支持:chromium// kernelMilestone: '128', // 支持:128// args: {//     "--proxy-bypass-list": "detect.nstbrowser.io"// }, // 浏览器参数// fingerprint: {//     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent 从 v0.15.0 版本开始支持// },
};const query = new URLSearchParams({token: token, // 必需config: JSON.stringify(config),
});const browserWSEndpoint = `https://less.nstbrowser.io/connect?${query.toString()}`;
// 连接 browserless
const browser = await puppeteer.connect({browserWSEndpoint,defaultViewport: null,
})
console.info('连接成功!');// 创建新页面
const page = await browser.newPage()// 访问 IMDb 前 250 名页面
await page.goto('https://www.imdb.com/chart/top/?ref_=nv_mv_250')// 等待电影列表加载
await page.waitForSelector('.ipc-metadata-list')// 获取电影标题列表
const moviesList = await page.$$eval('.ipc-metadata-list h3.ipc-title__text', nodes => nodes.map(node => node.textContent));console.log('[IMDb 前 250 名电影]===>', moviesList);// 关闭浏览器
await browser.close();
Playwright

它是一个活跃的开源项目,有大量的贡献者。Playwright 由微软开发,支持多种浏览器(Chromium、Firefox 和 WebKit)和多种编程语言(Nodejs、Python、.NET 和 Java),使其成为最通用的高质量浏览器自动化工具之一。

在 Nodejs 中使用

  • 安装 Playwright
# pnpm
pnpm create playwright
# yarn
yarn create playwright
# npm
npm init playwright@latest
  • 代码脚本
import { chromium } from 'playwright'const token = "您的 api 密钥"; // '您的代理'const config = {proxy: '您的代理', // 必需;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080// platform: 'windows', // 支持:windows, mac, linux// kernel: 'chromium', // 仅支持:chromium// kernelMilestone: '128', // 支持:128// args: {//     "--proxy-bypass-list": "detect.nstbrowser.io"// }, // 浏览器参数// fingerprint: {//     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent 从 v0.15.0 版本开始支持// },
};const query = new URLSearchParams({token: token, // 必需config: JSON.stringify(config),
});const browserWSEndpoint = `ws://less.nstbrowser.io/connect?${query.toString()}`;
// 连接 browserless
const browser = await chromium.connectOverCDP(browserWSEndpoint);
console.info('连接成功!');// 创建新页面
const page = await browser.newPage();// 访问 IMDb 前 250 名页面
await page.goto('https://www.imdb.com/chart/top/?ref_=nv_mv_250');// 等待电影列表加载
await page.waitForSelector('.ipc-metadata-list');// 获取电影标题列表
const moviesList = await page.$$eval('.ipc-metadata-list h3.ipc-title__text', nodes => nodes.map(node => node.textContent));console.log('[IMDb 前 250 名电影]===>', moviesList);// 关闭浏览器
await browser.close();

在 Python 中使用

  • 安装 Playwright
pip install pytest-playwright
  • 代码脚本
from playwright.sync_api import sync_playwright
from urllib.parse import urlencode
import jsontoken = "您的 api 密钥"  # '您的代理'config = {"proxy": "您的代理",  # 必需;输入格式:schema://user:password@host:port 例如:http://user:password@localhost:8080# platform: 'windows', // 支持:windows, mac, linux# kernel: 'chromium', // 仅支持:chromium# kernelMilestone: '128', // 支持:128# args: {#     "--proxy-bypass-list": "detect.nstbrowser.io"# }, // 浏览器参数# fingerprint: {#     userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', // userAgent 从 v0.15.0 版本开始支持# },
}query = urlencode({"token": token, "config": json.dumps(config)})browser_ws_endpoint = f"ws://less.nstbrowser.io/connect?{query}"def scrape_imdb_top_250():with sync_playwright() as p:# 连接 browserlessbrowser = p.chromium.connect_over_cdp(browser_ws_endpoint)print("连接成功!")# 创建新页面page = browser.new_page()# 访问 IMDb 前 250 名页面page.goto("https://www.imdb.com/chart/top/?ref_=nv_mv_250")# 等待电影列表加载page.wait_for_selector(".ipc-metadata-list")# 获取电影标题列表movies_list = page.eval_on_selector_all(".ipc-metadata-list h3.ipc-title__text","nodes => nodes.map(node => node.textContent)",)print("[IMDb 前 250 名电影]===>", movies_list)# 关闭浏览器browser.close()scrape_imdb_top_250()

选择您喜欢的语言和库,执行相应的脚本,您就可以看到抓取的结果!

第 4 步:查看 Browserless 仪表板

您可以在 Nstbrowser 客户端的 Browserless 菜单中查看最近请求的所有统计信息和剩余的会话时间。

使用 Browserless 绕过抓取阻止的 5 个技巧?

无头浏览器和常规浏览器之间存在一些关键差异。反机器人服务通过发现这些差异来检测无头浏览器。

使用 Browserless 绕过抓取阻止涉及几个关键策略:

  1. 使用无头浏览器: Browserless 允许您运行无头浏览器(如 Puppeteer),它们可以模仿真实用户的行为,降低检测风险。
  2. 轮换用户代理: 随机化用户代理可以帮助避免阻止,使您的请求看起来来自不同的浏览器。
  3. 实施代理轮换: 利用轮换代理频繁更改 IP 地址,最大限度地减少被目标网站阻止的可能性。
  4. 限制请求: 模仿类似人类的浏览行为,在请求之间引入延迟,防止触发安全措施的快速请求。
  5. 管理 Cookie 和会话: 正确处理 Cookie 和会话数据以保持连续性并避免检测,因为持续的会话不太可能被标记。

Browserless 和无头浏览器之间的区别是什么?

定义:

Browserless: 提供基于云的浏览器自动化的服务或平台,使用户能够运行无头浏览器,而无需管理底层基础设施。

无头浏览器: 一种没有图形用户界面 (GUI) 的网页浏览器,可以在命令行环境中运行,可用于自动化网页任务。

管理:

Browserless: 提供托管服务,抽象了设置和维护浏览器实例的复杂性。用户通过 API 与之交互以启动任务。

无头浏览器: 要求用户设置和管理浏览器环境,包括依赖项和配置。

可扩展性:

Browserless: 专为可扩展性而设计,使用户能够轻松地并行运行多个浏览器实例,利用云资源。

无头浏览器: 扩展可能需要更多的手动工作,例如管理多个实例和服务器资源。

用例:

Browserless: 非常适合需要可扩展自动化来进行网页抓取、测试和数据提取而无需基础设施问题的开发人员和团队。

无头浏览器: 适用于喜欢直接控制其自动化任务并愿意管理其自身环境的开发人员。

集成:

Browserless: 通常提供与各种工具和服务的集成,使其更容易集成到现有工作流程中。

无头浏览器: 需要定制的集成工作才能与其他工具或服务连接。

总结

如何在云中使用 browserless 进行网页抓取?我们已经探讨了 4 个详细步骤。只需选择您喜欢的库,然后抓取您需要的数据。

此外,我们还了解了:

  • 云浏览器是什么?
  • Browserless 的优势
  • 避免阻止的 5 个有效方法

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

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

相关文章

cmake--list

教程 list--链接 list关键字的作用 list的操作 list追加字符串--APPEND set(str1 "aaaaaaaa") message(STATUS "str1${str1}") list(APPEND str1 "bbbb") message(STATUS "str1${str1}") list字符串拼接并不是直接拼接&#xff0c…

C# 用Timer控件简单写一个倒计时60s功能

先放界面上一个Label和一个Timer控件,Label用来展示倒计时秒数 添加事件 设置属性,设置每隔一秒执行一次 放代码: //设置时间控件开始运行,具体放在哪里看具体需求 this.timer1.Start();//定义一个全局变量表示秒数 int time…

在线版宣传册是如何制作的

​亲爱的创作者们,你是否想过将传统的纸质宣传册升级为更具吸引力的在线版?在这个数字化时代,在线版宣传册不仅能够节省印刷成本,还能让信息传递更加迅速、精准。今天,就让我们一起探索在线版宣传册的制作奥秘吧&#…

利用Mongoose库实现MQTT通信

Mongoose官方Github地址 官方对于Mongoose的简介: Mongoose - Embedded Web Server / Embedded Network Library Mongoose is a network library for C/C. It provides event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT, and other protocol…

【吉林一号卫星简介】

吉林一号卫星 吉林一号卫星是中国长光卫星技术有限公司研制的遥感卫星,也是该公司在建的核心工程,是中国重要的光学遥感卫星星座。以下是对吉林一号卫星的详细介绍: 一、卫星概况 中文名:吉林一号外文名:Jilin 1 Bus…

视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR平台具备强大的拓展性和灵活性,支持多种视频流的外部分发&…

丝杆支撑座许用条件的解析

丝杆支撑座连接滚珠丝杆使用能够支撑滚珠丝杆,使之更加平稳的运动,显著提高传动效率、降低噪音、提高精度、延长使用寿命等优势,是自动化设备中重要的传动元件。影响丝杆支撑座的因素主要包括轴承类型、润滑脂的使用、密封圈的保护、使用环境…

实现边框渐变效果

实现思路:定义一个具有相对定位、白色背景和透明边框的元素。边框宽度为3像素,并且有20像素的圆角。通过background-clip: padding-box;确保背景不会延伸到边框之外。 使用一个伪元素&::before来创建一个渐变边框。这个伪元素被放置在主元素的外部&…

Qt-QComboBox输入类控件(31)

目录 描述 核心方法 核心信号 使用 代码方式 界面操作方式 动态使用 如何看待输入输出 String与QString互相转化 描述 一个可以下拉的输入框 核心方法 addItem(constQString&)添加⼀个条⽬currentIndex()获取当前条⽬的下标 从0开始计算.如果当前没有条⽬被选中…

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题 最近两天更新了Xcode 16,然后正好要发布新版本的App,打包Adhoc没问题,但是上传AppStoreConnect或者TestFlight就不行解决方案参考资料 最近两天更新了Xcode 16,然后正好要发布新…

RegNet(CVPR2020):Designing Network Design Spaces,设计一个网络设计空间!

RegNet:Designing Network Design Spaces RegNet:设计一个网络设计空间 论文地址: https://arxiv.org/pdf/2003.13678 1、前言 在这项工作中,作者提出了一种新的网络设计范例。 作者的目标是帮助增进对网络设计的理解并发现跨设置…

【js逆向学习】酷我音乐排行榜 python+nodejs(webpack)

逆向目标 目标网址: https://www.kuwo.cn/rankList目标接口: https://www.kuwo.cn/api/www/bang/bang/musicList 加密参数: 参数一:secret参数二:reqId 逆向过程 老规矩先分析网络请求,我们可以分析到网络请求是通过ajax进行的&#xff…

【研赛E题成品论文】24华为杯数学建模研赛E题成品论文+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛E题成品论文已出! E题 高速公路应急车道紧急启用模型 一、问题一模型建立与求解 1.1 问题一求解思路 赛题要求我们基于四个观测点的视频数据,提取交通流参数并分析这些参数随时间的变化规律。交通流参数包括:…

JAVA并发编程系列(11)线程池底层原理架构剖析

面试官:说说JAVA线程池的几个核心参数? 之前我们用了10篇文章详细剖析了synchronized、volatile、CAS、AQS、ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier、并发锁、Condition等各个核心基础原理,今天开始我们说说并发领域的各种…

ChatGLM-6B:部署指南与实战应用全解析

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 SD3ComfyUI文生图部署步骤DAMODEL-ChatGLM-6B 服务端部署1.1、实例创建1.2、模型准备1.3、模型启动 SD3ComfyUI文生图部署步骤 Chat…

Redis6.0.9配置redis集群

写在前面 最近在完成暑期大作业,期间要将项目部署在云服务器上,其中需要进行缓存的配置,决定使用Redis,为了使系统更加健壮,选择配置Redis-Cluster。由于服务器资源有限,在一台服务器上运行6个Redis Instan…

pnpm : 无法加载文件

1、以管理员身份运行window powershell 2、执行Get-ExecutionPolicy,显示Restricted 3、执行set-ExecutionPolicy,会提示输入参数,此时输入RemoteSigned回车 4、执行y回车

想把泰文从文本上识别,什么软件工具好用呢?

泰文识别技术涉及将泰文图像转换成数字文本,主要通过光学字符识别(OCR)技术实现。这项技术广泛应用于文档处理、语言学习和翻译服务。实现泰文识别的方法包括使用手机应用程序、在线服务、专业软件,以及结合人工智能和机器学习。此…

【Docker】如何让docker容器正常使用nvidia显卡

首先确保宿主机正常安装了显卡驱动 nvidia-smi打印显卡信息如下: 安装nvidia-container-toolkit工具 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker运行如下命令测试显卡是否在容器内可用 …

Arduino中使用库文件读取陀螺仪MPU6050欧拉角

目录 1、库文件安装 (1)方法1-网上下载库文件 (2)方法2-本地库文件夹中添加 2、欧拉角获取 (1)打开测试程序 (2)读欧拉角程序 (3)坐标系和欧拉角说明 …