文章目录
前言
网络抓取就像没有剧本的戏剧导演——难以预测、杂乱无章。这就是 Playwright 的用武之地:它是一款功能强大的无头浏览器自动化工具,能让现代动态网站刮擦变得前所未有的顺畅。在本实用教程中,您将学习如何使用 Playwright 从任何网页中可靠地提取数据。
一、什么是 Playwright?
Playwright 是一个现代网络抓取和浏览器自动化框架,可简化从网页中提取数据的过程。它支持多种无头浏览器,包括 Chromium、Firefox 和 WebKit,是一款能满足许多常用开发人员需求的便捷工具。它还提供了一个简单易用的 API,允许开发人员与动态用户界面交互,使用 CSS 选择器定位元素,并轻松提取结构化数据。
虽然 Playwright 是一款新工具,但它凭借其丰富的功能在众多老工具中脱颖而出。它擅长处理现代 JavaScript 繁重的网站,支持 JavaScript、Python 和 C# 等多种编程语言,允许开发人员使用任何首选语言编写脚本。Playwright 还能创建隔离的浏览器上下文,从而在不共享状态的情况下同时对多个页面进行刮擦,使其既高效又安全。可以看出,Playwright 是由深谙网页搜索之道的人创建的,并将所有最好的功能都整合到了这个神奇的框架中。
如果您觉得要获取数据的网站就像威廉莎士比亚的《无事生非》中错综复杂的情节一样复杂——不用担心,Playwright 可以轻松应对任何网络抓取或网络自动化挑战。
二、使用 Playwright 进行网络抓取的方法
Playwright 提供了几种功能强大的网络抓取方法,适用于不同的编程语言,包括 Python、Node.js 和 JavaScript。下面列出了其中几种:
- 页面导航。使用 Playwright,您可以使用 page.goto() 等函数导航到网页。这样,您就可以浏览网站的各个页面,当内容不局限于一个页面时,这一点尤其有用。这是一种常用的方法,可用于搜索在多个页面上列出产品的电子商务网站。
- 元素选择。Playwright 允许您使用 CSS 选择器或 XPath 选择页面上的元素。无论您的偏好如何,该框架都能让您使用 page.querySelector() 等方法轻松选择 HTML 元素。选定元素后,您可以提取各种类型的数据,包括文本、链接、图像和属性。
- 处理动态内容。Playwright 可以通过 page.waitForSelector() 或 page.waitForTimeout() 等待元素加载,从而与 JavaScript 较多的网站进行交互,确保在刮擦之前内容已完全加载。
- 与元素互动。 Playwright 允许您模拟点击按钮、填写表格和滚动页面以加载更多内容等操作。page.click() 等方法可以帮助您搜索交互式元素背后的内容。
- 处理浏览器上下文。Playwright 支持多个浏览器上下文,因此您可以从不同的网页中抓取数据或模拟用户会话,而不会发生冲突。该功能与可靠的代理服务器配合使用,是在浏览时保持匿名和不被发现的好方法。这对于多标签页面搜刮、多账户管理或同时自动执行多个操作非常有用。
- 网络拦截。你可以使用 page.route() 拦截网络请求和响应,通过 API 调用收集动态加载的数据,提供了一种直接从网络流量中获取数据的高级方法。
- 浏览器自动化。Playwright 可自动执行复杂的工作流程,如登录网站、提交表单和浏览各种页面,因此适用于从具有登录机制或多步骤交互的应用程序中抓取数据。
三、使用 Playwright 进行网络搜索:分步指南
既然你已经了解了 Playwright 的全部功能,那就让我们开始设置它以进行网络刮擦吧。在本教程中,我们将使用 Node.js,但也可以使用 Python 安装该框架。请按照以下步骤进行设置并立即开始使用:
- 安装 Playwright。你可以使用 npm、yarn 或 pnpm 获取 Playwright,在终端中输入下面的命令即可。你需要回答一些提示,例如在 TypeScript 和 JavaScript 之间进行选择、测试文件夹的名称以及浏览器:
npm
npm init playwright@latest
yarn
yarn create playwright
pnpm
pnpm create playwright
- 在脚本中加入 Playwright。创建一个新的 JavaScript (.js) 文件,在文件开头加入下面一行。如果安装了 webkit 或 firefox,可以将 chromium 选项换成 webkit 或 firefox。
const { chromium } = require('playwright');
- 浏览网页。在本例中,我们将从一个名为 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();
})();
- 选择并提取特定元素。该网站有一个类似于普通网上商店的商品列表。虽然 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 中使用代理,可以通过浏览器的 launch 或 launchPersistentContext 选项传递代理设置。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 并不是最流行的网络刮擦工具片尾曲中提到的唯一名字。在搜索最有效的框架时,还有两个有名的名字–Puppeteer 和 Selenium。这些工具与 Playwright 有什么不同,为什么要选择它们?下面是一个简短的比较表:
Playwright | Puppeteer | Selenium | |
---|---|---|---|
速度 | 快速(支持现代浏览器) | 快速(仅适用于基于 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 站在舞台中央了吗?立即体验无缝网络抓取的强大功能!