LangChain 实战:URL 加载与网页内容爬虫封装
Web 检索是 AI 大模型应用的一个热门方向。其涉及的主要步骤如下:
- 用户提问,联网检索
- 通过 URLs 记载网页 HTML 数据
- 加载到的数据通过转换,获取关注的内容,形成文本
- 对文本进行分块、向量化、存储
- 调用大模型进行总结、答案生成
这其实就是 RAG(Retrieval-Augmented Generation)的基本流程,只不过知识库不再局限在你自己的知识库,而是利用在线检索,搜罗互联网上的数据作为相关知识。
搜罗数据的过程,可以有两种方法:一种是调用检索的 API(例如 GoogleSearch API),直接获取检索结果;另一种方法是靠爬虫,将网页数据抓取下来,存入向量数据库使用。
本文重点探讨基于 LangChain 框架的爬虫相关使用方法。
0. LangChain 接口架构
LangChain 中,将爬虫功能分成了两个核心模块:Loading 和 Transforming。
- Loading 模块:负责将 URL 加载转换成 HTML 内容。封装的类包括
AsyncHtmlLoader类、AsyncChromiumLoader类等。 - Transforming 模块:负责将 HTML 内容转换成需要的纯文本。封装的类包括
HTML2Text类、BeautifulSoup类等。
0.1 Loading 模块简介
- AsyncHtmlLoader:使用 aiohttp 库生成异步 HTTP 请求,适用于更简单、轻量级的抓取场景。它适合静态页面,响应速度快,资源消耗低。
- AsyncChromiumLoader:使用 Playwright 启动 Chromium 实例,该实例可以处理 JavaScript 渲染和更复杂的 Web 交互。Chromium 是 Playwright 支持的浏览器之一,Playwright 是一个用于控制浏览器自动化的库。此方式适合动态加载内容的网站。
0.2 Transforming 模块简介
- HTML2Text:将 HTML 内容直接转换为纯文本,而无需任何特定的标记操作。它最适合于目标是提取人类可读文本而不需要操作特定 HTML 元素的场景。
- Beautiful Soup:对 HTML 内容提供了更细粒度的控制,支持特定的标记提取、删除和内容清理。它适用于需要提取特定信息并根据需要清理 HTML 内容的情况。
1. 快速上手 - Quick Start
1.1 环境准备
在开始之前,请确保已安装必要的依赖库:
pip install langchain langchain-community beautifulsoup4 playwright
playwright install chromium
1.2 Demo 代码
以下示例演示了如何使用 AsyncChromiumLoader 加载 URL,并使用 BeautifulSoupTransformer 提取特定标签内容。
urls = ["https://mp.weixin.qq.com/s/Zklc3p5uosXZ7XMHD1k2QA"]
from langchain_community.document_loaders import AsyncChromiumLoader
from langchain_community.document_transformers import BeautifulSoupTransformer
loader = AsyncChromiumLoader(urls)
html_docs = loader.load()
()
doc html_docs:
(doc.page_content[:])
bs_transformer = BeautifulSoupTransformer()
docs_transformed = bs_transformer.transform_documents(html_docs, tags_to_extract=[])
()
doc docs_transformed:
(doc.page_content)


