Playwright 网络抓取: 实用教程

前言

网络抓取就像没有剧本的戏剧导演——难以预测、杂乱无章。这就是 Playwright 的用武之地:它是一款功能强大的无头浏览器自动化工具,能让现代动态网站刮擦变得前所未有的顺畅。在本实用教程中,您将学习如何使用 Playwright 从任何网页中可靠地提取数据。

在这里插入图片描述

一、什么是 Playwright?

Playwright 是一个现代网络抓取和浏览器自动化框架,可简化从网页中提取数据的过程。它支持多种无头浏览器,包括 Chromium、Firefox 和 WebKit,是一款能满足许多常用开发人员需求的便捷工具。它还提供了一个简单易用的 API,允许开发人员与动态用户界面交互,使用 CSS 选择器定位元素,并轻松提取结构化数据。

虽然 Playwright 是一款新工具,但它凭借其丰富的功能在众多老工具中脱颖而出。它擅长处理现代 JavaScript 繁重的网站,支持 JavaScript、Python 和 C# 等多种编程语言,允许开发人员使用任何首选语言编写脚本。Playwright 还能创建隔离的浏览器上下文,从而在不共享状态的情况下同时对多个页面进行刮擦,使其既高效又安全。可以看出,Playwright 是由深谙网页搜索之道的人创建的,并将所有最好的功能都整合到了这个神奇的框架中。

如果您觉得要获取数据的网站就像威廉莎士比亚的《无事生非》中错综复杂的情节一样复杂——不用担心,Playwright 可以轻松应对任何网络抓取或网络自动化挑战。

二、​​使用 Playwright 进行网络抓取的方法

Playwright 提供了几种功能强大的网络抓取方法,适用于不同的编程语言,包括 Python、Node.js 和 JavaScript。下面列出了其中几种:

  1. 页面导航。使用 Playwright,您可以使用 page.goto() 等函数导航到网页。这样,您就可以浏览网站的各个页面,当内容不局限于一个页面时,这一点尤其有用。这是一种常用的方法,可用于搜索在多个页面上列出产品的电子商务网站。
  2. 元素选择。Playwright 允许您使用 CSS 选择器或 XPath 选择页面上的元素。无论您的偏好如何,该框架都能让您使用 page.querySelector() 等方法轻松选择 HTML 元素。选定元素后,您可以提取各种类型的数据,包括文本、链接、图像和属性。
  3. 处理动态内容。Playwright 可以通过 page.waitForSelector()page.waitForTimeout() 等待元素加载,从而与 JavaScript 较多的网站进行交互,确保在刮擦之前内容已完全加载。
  4. 与元素互动。 Playwright 允许您模拟点击按钮、填写表格和滚动页面以加载更多内容等操作。page.click() 等方法可以帮助您搜索交互式元素背后的内容。
  5. 处理浏览器上下文。Playwright 支持多个浏览器上下文,因此您可以从不同的网页中抓取数据或模拟用户会话,而不会发生冲突。该功能与可靠的代理服务器配合使用,是在浏览时保持匿名不被发现的好方法。这对于多标签页面搜刮、多账户管理或同时自动执行多个操作非常有用。
  6. 网络拦截。你可以使用 page.route() 拦截网络请求和响应,通过 API 调用收集动态加载的数据,提供了一种直接从网络流量中获取数据的高级方法。
  7. 浏览器自动化。Playwright 可自动执行复杂的工作流程,如登录网站、提交表单和浏览各种页面,因此适用于从具有登录机制或多步骤交互的应用程序中抓取数据。

三、使用 Playwright 进行网络搜索:分步指南

既然你已经了解了 Playwright 的全部功能,那就让我们开始设置它以进行网络刮擦吧。在本教程中,我们将使用 Node.js,但也可以使用 Python 安装该框架。请按照以下步骤进行设置并立即开始使用:

  1. 安装 Playwright。你可以使用 npmyarnpnpm 获取 Playwright,在终端中输入下面的命令即可。你需要回答一些提示,例如在 TypeScript 和 JavaScript 之间进行选择、测试文件夹的名称以及浏览器:

npm

npm init playwright@latest

yarn

yarn create playwright

pnpm

pnpm create playwright
  1. 在脚本中加入 Playwright。创建一个新的 JavaScript (.js) 文件,在文件开头加入下面一行。如果安装了 webkit 或 firefox,可以将 chromium 选项换成 webkitfirefox
const { chromium } = require('playwright');
  1. 浏览网页。在本例中,我们将从一个名为 ScrapeMe 的网站上提取数据,该网站非常适合进行各种网页刮擦测试。有了下面的代码,你就可以启动一个新的浏览器窗口并导航到网页:
const { chromium } = require('playwright');

(async () => {
// Launch a new browser instance
const browser = await chromium.launch({ headless: false });
// Open a new page
const page = await browser.newPage();
// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');
// After the above actions are performed, close the browser.
await browser.close();
})();
  1. 选择并提取特定元素。该网站有一个类似于普通网上商店的商品列表。虽然 Playwright 提供了多种与网页交互的功能,但在本例中,我们只需根据类名从列表中选择第 3 种产品即可。让我们扩展前面的代码:
const { chromium } = require('playwright');

(async () => {
// Launch a new browser instance
const browser = await chromium.launch({ headless: false });
// Open a new page
const page = await browser.newPage();
// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');

// Select all elements matching the class
const productElements = await page.$$('.woocommerce-loop-product__title');

// Access the 3rd element (index 2) and get its text content
const thirdProductTitle = await productElements[2].textContent();
console.log(`3rd Product Title: ${thirdProductTitle}`);

// After the above actions are performed, close the browser.
await browser.close();
})();

该脚本会打开一个浏览器窗口,导航到目标网站,选择具有已定义类的所有元素,然后从具有该类的项目列表中打印第 3 个元素的文本内容。如果您不确定如何检查网站的 HTML 并找到标题的类名,请查看我们的元素检查综合指南。

在这些示例中,我们使用了 headless: false 选项,该选项可使浏览器在执行脚本操作时可见。你可以将其设置为 true,以节省计算机资源,并只在终端中获得结果。

四、代理实施

虽然 Playwright 允许自动脚本为您工作,但请记住,请求仍然来自您的 IP 地址。为了实现完全匿名和无风险的网络搜索,强烈建议您使用高质量的代理。Decodo 提供一系列高性价比的代理解决方案,包括廉价代理,覆盖 195 个以上国家/地区,平均速度小于 0.3 秒,正常运行时间为 100%,可确保您使用 Playwright 进行的网络搜刮活动不被发现。

要在 Playwright 中使用代理,可以通过浏览器的 launchlaunchPersistentContext 选项传递代理设置。Playwright 通过接收代理服务器 URL 的代理对象支持代理集成。

以下是如何修改脚本,使其包含带身份验证的代理:

const { chromium } = require('playwright');

(async () => {
 // Proxy server
 const proxy = 'gate.decodo.com:10001';
 // Launch a new browser instance with proxy settings
 const browser = await chromium.launch({
  headless: false,
  proxy: {
  server: `http://${proxy}`,
},
});

// Open a new browser context and pass the credentials
const context = await browser.newContext({
 httpCredentials: {
  username: 'user',
  password: 'pass',
 },
});

// Open a single page
const page = await context.newPage();

// Check IP on the same page by navigating to the IP check URL
await page.goto('https://ip.decodo.com/ip');
const content = await page.evaluate(() => document.body.innerText);
console.log(`Your IP: ${content}`);

// Navigate to the ScrapeMe website
await page.goto('https://scrapeme.live/shop/');

// Select all elements matching the class
const productElements = await page.$$('.woocommerce-loop-product__title');

// Access the 3rd element (index 2) and get its text content
const thirdProductTitle = await productElements[2].textContent();
console.log(`3rd Product Title: ${thirdProductTitle}`);

// Close the browser
await browser.close();
})();

该脚本会做几件事:首先,它连接到代理服务器,通过不同的 IP 地址发出任何未来请求。然后,它向 Decodo IP 检查器网站发出请求,打印您的 IP 地址,以检查连接是否来自您自己的不同地址。最后,它会向 ScrapeMe 网站发出同样的请求,以打印产品页面的第三个元素。

五、剧作家与其他框架

Playwright 并不是最流行的网络刮擦工具片尾曲中提到的唯一名字。在搜索最有效的框架时,还有两个有名的名字–PuppeteerSelenium。这些工具与 Playwright 有什么不同,为什么要选择它们?下面是一个简短的比较表:

PlaywrightPuppeteerSelenium
速度快速(支持现代浏览器)快速(仅适用于基于 Chromium 的浏览器)速度较慢(支持旧版浏览器)
特点先进的自动化,支持跨浏览器专注于 Chromium;其他浏览器功能较少功能丰富但现代化程度较低
效率高(默认为无头浏览器,可同时运行多个实例)高(仅限于 Chromium,适合现代设置)中型(由于传统支持,占用空间较大)
易于使用简单(便于开发人员使用的应用程序接口,易于设置)简单(简单的APIs)中等(学习曲线较陡)
社区小型(由微软支持中等的 (由 Google 提供支持)大型企业(长期从事该行业的资深企业)
文件优秀(详细且定期更新)良好(侧重于 Chromium 使用案例)广泛(涵盖传统和现代用例)
浏览器支持Chromium、Firefox、WebKit仅限基于 Chromium 的浏览器Chromium、火狐浏览器、Safari、IE 浏览器、Edge
编程语言支持多种语言(JavaScript、Python、Java、C# 等)有限(主要是 JavaScript)广泛(JavaScript、Python、Java、Ruby 等)

六、Playwright 与 Puppeteer 的网页抓取对比

Playwright 和 Puppeteer 提供快速高效的刮擦功能,但面向不同的受众。Playwright 支持多种浏览器,是跨浏览器刮擦任务的理想选择,而 Puppeteer 则只专注于基于 Chromium 的浏览器。Playwright 还提供默认无头模式和并发会话等高级功能,使其在复杂工作流程的效率方面更具优势。不过,Puppeteer 的简单性和与 Chromium 的紧密集成使其成为更直接的刮擦项目的绝佳选择。

七、Playwright 与 Selenium 的网页抓取对比

Playwright 和 Selenium 是另一对优秀的框架,它们在不同的阶段各显神通。Playwright 提供现代 API、默认无头浏览器模式和卓越的效率,是复杂工作流程的理想选择。相比之下,Selenium 广泛支持传统浏览器(如 Internet Explorer)和更广泛的编程语言,使其成为需要传统兼容性的项目的更好选择。虽然 Selenium 拥有更大的社区和更成熟的生态系统,但对于现代浏览器自动化任务而言,Playwright 的速度更快、效率更高。

总结

Playwright 已经完成了最后的鞠躬–这真是一场精彩的演出!Playwright 具有广泛的浏览器支持、现代化的功能和简便的设置,作为网络刮擦和自动化的最佳框架之一,Playwright 确实赢得了满堂喝彩。无论您是协调复杂的搜索项目还是运行简单的数据提取脚本,该工具都能让您的工作流程顺畅高效。将它与 Decodo 可靠的代理解决方案搭配使用,可以保持匿名和不被发现的状态,确保演出顺利进行。准备好利用 Playwright 站在舞台中央了吗?立即体验无缝网络抓取的强大功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值