使用 Playwright 的网页
仅适用于 Node.js。
本示例介绍如何使用 Playwright 从网页加载数据。每个网页将生成一个文档。
Playwright 是一个 Node.js 库,提供了用于控制多个浏览器引擎(包括 Chromium、Firefox 和 WebKit)的高级 API。你可以使用 Playwright 自动化网页交互,包括从需要 JavaScript 渲染的动态网页中提取数据。
如果你希望使用更轻量级的解决方案,并且你想要加载的网页不需要 JavaScript 来渲染,你可以使用 CheerioWebBaseLoader。
安装
- npm
- Yarn
- pnpm
npm install @langchain/community @langchain/core playwright
yarn add @langchain/community @langchain/core playwright
pnpm add @langchain/community @langchain/core playwright
使用方法
import { PlaywrightWebBaseLoader } from "@langchain/community/document_loaders/web/playwright";
/**
* 加载器默认使用 `page.content()`
* 作为评估函数
**/
const loader = new PlaywrightWebBaseLoader("https://www.tabnews.com.br/");
const docs = await loader.load();
选项参数
以下是你可以通过 PlaywrightWebBaseLoaderOptions 接口传递给 PlaywrightWebBaseLoader 构造函数的参数说明:
type PlaywrightWebBaseLoaderOptions = {
launchOptions?: LaunchOptions;
gotoOptions?: PlaywrightGotoOptions;
evaluate?: PlaywrightEvaluate;
};
launchOptions: 一个可选对象,用于指定传递给 playwright.chromium.launch() 方法的附加选项。这可以包括例如 headless 标志,用于以无头模式启动浏览器。gotoOptions: 一个可选对象,用于指定传递给 page.goto() 方法的附加选项。这可以包括例如 timeout 选项,用于指定最大导航时间(以毫秒为单位),或 waitUntil 选项,用于指定何时认为导航成功。evaluate: 一个可选函数,可用于使用自定义评估函数在页面上执行 JavaScript 代码。这对于从页面提取数据、与页面元素交互或处理特定 HTTP 响应非常有用。该函数应返回一个 Promise,该 Promise 解析为包含评估结果的字符串。
通过将这些选项传递给 PlaywrightWebBaseLoader 构造函数,你可以自定义加载器的行为,并利用 Playwright 强大的功能来抓取和交互网页。
以下是一个基本示例:
import {
PlaywrightWebBaseLoader,
Page,
Browser,
} from "@langchain/community/document_loaders/web/playwright";
const url = "https://www.tabnews.com.br/";
const loader = new PlaywrightWebBaseLoader(url);
const docs = await loader.load();
// 原始 HTML 页面内容
const extractedContents = docs[0].pageContent;
以及一个更高级的示例:
import {
PlaywrightWebBaseLoader,
Page,
Browser,
} from "@langchain/community/document_loaders/web/playwright";
const loader = new PlaywrightWebBaseLoader("https://www.tabnews.com.br/", {
launchOptions: {
headless: true,
},
gotoOptions: {
waitUntil: "domcontentloaded",
},
/** 传递自定义的 evaluate 函数,在这种情况下你将获得 page 和 browser 实例 */
async evaluate(page: Page, browser: Browser, response: Response | null) {
await page.waitForResponse("https://www.tabnews.com.br/va/view");
const result = await page.evaluate(() => document.body.innerHTML);
return result;
},
});
const docs = await loader.load();