求助:LangChain JavaScript中UnstructuredURLLoader的替代方案
替代LangChain JS中UnstructuredURLLoader的方案(解决cheerio+html-to-text冗余内容问题)
方案1:使用LangChain官方的RecursiveUrlLoader
- 这是LangChain JS内置的URL加载器,自带HTML内容清理逻辑,能自动过滤CSS、JS代码及无关URL,直接提取页面核心文本,适配RetrievalQA场景。
- 使用示例:
import { RecursiveUrlLoader } from "langchain/document_loaders/web/recursive_url"; const loader = new RecursiveUrlLoader("https://your-target-url.com", { maxDepth: 1, // 控制递归抓取深度,避免冗余页面 extractor: async (pageContent) => { // 可选自定义提取逻辑,进一步优化文本质量 const doc = new DOMParser().parseFromString(pageContent, "text/html"); return doc.body.textContent.trim().replace(/\s+/g, " "); }, }); const cleanedDocs = await loader.load();
方案2:自定义基于CheerioWebBaseLoader的文本清理逻辑
- 若偏好cheerio生态,可扩展
CheerioWebBaseLoader,在加载后添加严格的过滤规则,移除CSS、JS标签及属性内容。 - 使用示例:
import { CheerioWebBaseLoader } from "langchain/document_loaders/web/cheerio"; class CleanCheerioLoader extends CheerioWebBaseLoader { async load() { const rawDocs = await super.load(); return rawDocs.map(doc => { // 清理规则:移除script/style标签、URL属性、多余空格 const cleanedText = doc.pageContent .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "") .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "") .replace(/(href|src)="[^"]*"/gi, "") .replace(/\s+/g, " "); return { ...doc, pageContent: cleanedText.trim() }; }); } } const loader = new CleanCheerioLoader("https://your-target-url.com"); const cleanedDocs = await loader.load();
方案3:用PlaywrightWebBaseLoader处理动态页面
- 针对JS渲染的动态页面,Playwright可模拟浏览器加载完整页面,提取纯文本时天然规避CSS、JS代码混入。
- 使用示例:
import { PlaywrightWebBaseLoader } from "langchain/document_loaders/web/playwright"; import { chromium } from "playwright"; const loader = new PlaywrightWebBaseLoader("https://your-target-url.com", { launchOptions: { headless: true }, async evaluate(page) { await page.waitForLoadState("networkidle"); // 等待页面完全加载 return page.textContent("body").then(text => text.replace(/\s+/g, " ")); }, }); const cleanedDocs = await loader.load();
内容的提问来源于stack exchange,提问作者Apurv JHA
相关产品推荐
相关产品推荐

