如何在云端使用 Browserless 进行网页抓取?
云浏览器是什么?
云浏览器是一种基于云的组合,它将网页浏览器应用程序与一个虚拟化的容器相结合,实现了远程浏览器隔离的概念。开发人员可以使用流行的工具(如 Playwright 和 Puppeteer)来自动化网页浏览器,用于网页抓取和网页测试。
云浏览器在安全容器中执行来自网络的命令,该容器与用户端点分离,并通过远程显示协议访问。因此,浏览器应用程序更加集中、易于管理、更具成本效益、可扩展性和保护性。
为什么使用 Browserless 进行抓取?
Browserless 是一种功能强大的基于云的解决方案,可实现无缝的浏览器自动化、网页抓取和测试。Browserless 的主要目标是简化和扩展网页浏览器自动化任务(如测试和抓取),这可以通过以下两种方式实现:
- 在Docker 或 Kubernetes上运行多个浏览器实例。
- 使用现有的 Web 驱动程序代理服务器,如 Selenium Grid。
如何在云中使用 Browserless 进行网页抓取?
第 1 步:准备
在我们开始之前,我们需要拥有 Browserless 服务。使用 Browserless 可以解决复杂的网页爬取和大型自动化任务,并且它现在已经实现了完全托管的云部署。
Browserless 采用以浏览器为中心的 подход,提供强大的无头部署功能,并提供更高的性能和可靠性。有关 Browserless 的更多信息,您可以 获取文档 了解更多。
获取 API 密钥 并转到 Nstbrowser 客户端的 Browserless 菜单页面,或者您可以转到 Nstbrowser 客户端进行访问
第 2 步:确认抓取目标
在我们开始之前,我们需要确保我们要抓取的内容。在以下示例中,我们尝试抓取 IMDb 前 250 名电影中的电影标题。打开页面后:
- 等待页面正常加载,并将页面定位到 IMDb 前 250 名电影中的电影标题
- 打开调试控制台并识别电影标题的 html 元素
- 使用您喜欢的库获取电影标题
第 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 json
token = "您的 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:
# 连接 browserless
browser = 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 绕过抓取阻止涉及几个关键策略:
- 使用无头浏览器: Browserless 允许您运行无头浏览器(如 Puppeteer),它们可以模仿真实用户的行为,降低检测风险。
- 轮换用户代理: 随机化用户代理可以帮助避免阻止,使您的请求看起来来自不同的浏览器。
- 实施代理轮换: 利用轮换代理频繁更改 IP 地址,最大限度地减少被目标网站阻止的可能性。
- 限制请求: 模仿类似人类的浏览行为,在请求之间引入延迟,防止触发安全措施的快速请求。
- 管理 Cookie 和会话: 正确处理 Cookie 和会话数据以保持连续性并避免检测,因为持续的会话不太可能被标记。
Browserless 和无头浏览器之间的区别是什么?
定义:
Browserless: 提供基于云的浏览器自动化的服务或平台,使用户能够运行无头浏览器,而无需管理底层基础设施。
无头浏览器: 一种没有图形用户界面 (GUI) 的网页浏览器,可以在命令行环境中运行,可用于自动化网页任务。
管理:
Browserless: 提供托管服务,抽象了设置和维护浏览器实例的复杂性。用户通过 API 与之交互以启动任务。
无头浏览器: 要求用户设置和管理浏览器环境,包括依赖项和配置。
可扩展性:
Browserless: 专为可扩展性而设计,使用户能够轻松地并行运行多个浏览器实例,利用云资源。
无头浏览器: 扩展可能需要更多的手动工作,例如管理多个实例和服务器资源。
用例:
Browserless: 非常适合需要可扩展自动化来进行网页抓取、测试和数据提取而无需基础设施问题的开发人员和团队。
无头浏览器: 适用于喜欢直接控制其自动化任务并愿意管理其自身环境的开发人员。
集成:
Browserless: 通常提供与各种工具和服务的集成,使其更容易集成到现有工作流程中。
无头浏览器: 需要定制的集成工作才能与其他工具或服务连接。
总结
如何在云中使用 browserless 进行网页抓取?我们已经探讨了 4 个详细步骤。只需选择您喜欢的库,然后抓取您需要的数据。
此外,我们还了解了:
- 云浏览器是什么?
- Browserless 的优势
- 避免阻止的 5 个有效方法