网络抓取就像没有剧本的戏剧导演——难以预测、杂乱无章。这就是 Playwright 的用武之地:它是一款功能强大的无头浏览器自动化工具,能让现代动态网站刮擦变得前所未有的顺畅。在本实用教程中,您将学习如何使用 Playwright 从任何网页中可靠地提取数据。
Playwright 是一个现代网络抓取和浏览器自动化框架,可简化从网页中提取数据的过程。它支持多种无头浏览器,包括 Chromium、Firefox 和 WebKit,是一款能满足许多常用开发人员需求的便捷工具。它还提供了一个简单易用的 API,允许开发人员与动态用户界面交互,使用 CSS 选择器定位元素,并轻松提取结构化数据。
虽然 Playwright 是一款新工具,但它凭借其丰富的功能在众多老工具中脱颖而出。它擅长处理现代 JavaScript 繁重的网站,支持 JavaScript、Python 和 C# 等多种编程语言,允许开发人员使用任何首选语言编写脚本。Playwright 还能创建隔离的浏览器上下文,从而在不共享状态的情况下同时对多个页面进行刮擦,使其既高效又安全。可以看出,Playwright 是由深谙网页搜索之道的人创建的,并将所有最好的功能都整合到了这个神奇的框架中。
如果您觉得要获取数据的网站就像威廉莎士比亚的《无事生非》中错综复杂的情节一样复杂——不用担心,Playwright 可以轻松应对任何网络抓取或网络自动化挑战。
Playwright 提供了几种功能强大的网络抓取方法,适用于不同的编程语言,包括 Python、Node.js 和 JavaScript。下面列出了其中几种:
既然你已经了解了 Playwright 的全部功能,那就让我们开始设置它以进行网络刮擦吧。在本教程中,我们将使用 Node.js,但也可以使用 Python 安装该框架。请按照以下步骤进行设置并立即开始使用:
npm
npm init playwright@latest
yarn
yarn create playwright
pnpm
pnpm create playwright
const { chromium } = require('playwright');
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();
})();
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 则只专注于基于 Chromium 的浏览器。Playwright 还提供默认无头模式和并发会话等高级功能,使其在复杂工作流程的效率方面更具优势。不过,Puppeteer 的简单性和与 Chromium 的紧密集成使其成为更直接的刮擦项目的绝佳选择。
Playwright 和 Selenium 是另一对优秀的框架,它们在不同的阶段各显神通。Playwright 提供现代 API、默认无头浏览器模式和卓越的效率,是复杂工作流程的理想选择。相比之下,Selenium 广泛支持传统浏览器(如 Internet Explorer)和更广泛的编程语言,使其成为需要传统兼容性的项目的更好选择。虽然 Selenium 拥有更大的社区和更成熟的生态系统,但对于现代浏览器自动化任务而言,Playwright 的速度更快、效率更高。
Playwright 已经完成了最后的鞠躬–这真是一场精彩的演出!Playwright 具有广泛的浏览器支持、现代化的功能和简便的设置,作为网络刮擦和自动化的最佳框架之一,Playwright 确实赢得了满堂喝彩。无论您是协调复杂的搜索项目还是运行简单的数据提取脚本,该工具都能让您的工作流程顺畅高效。将它与 Decodo 可靠的代理解决方案搭配使用,可以保持匿名和不被发现的状态,确保演出顺利进行。准备好利用 Playwright 站在舞台中央了吗?立即体验无缝网络抓取的强大功能!