LangChain之借助Apify云平台实现网站内容爬取与回答问题

网站内容爬取与回答问题

Apify概述

Apify是一个网络抓取和数据提取的云平台,它提供了一个由一千多个现成的应用程序组成的生态系统,这些应用程序被称为Actors,用于各种网络抓取、爬行和数据提取用例。

数据集通常用于保存actor的结果:Actor应用程序对目标网站进行深度抓取,然后将网页的文本内容存储到数据集中

使用网站内容爬虫Actor,它可以深度爬取文档、知识库、帮助中心或博客等网站,并从网页中提取文本内容。然后将文档输入向量索引并回答其中的问题。

官网:https://apify.com/

文档:https://docs.apify.com/platform

爬取网站内容

爬取网站内容有2种方式,这里直接在Apify控制台执行爬取

点击Store菜单栏,然后搜索Actor名称,如:website-content-crawler
在这里插入图片描述
配置Start URLs,即配置爬取网站地址,这里配置https://www.runoob.com/
在这里插入图片描述
还可以对爬取、处理、输出、运行等参数配置
在这里插入图片描述
点击Save & Start,等待执行完毕,可以点击Storage菜单栏查看爬取结果
在这里插入图片描述

环境准备

安装Apify库

pip install apify-client

查看Apify API令牌并设置到环境变量中

os.environ["APIFY_API_TOKEN"] = 'apify_api_1xxxxxx5LB9'

设置OpenAI的BASE_URL、API_Key

os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-BGFnOL9Q4c99B378B66xxxxxx39b4813bc437B82c2"

Apify与LangChain集成

爬取网站内容有2种方式,这里通过Apify与LangChain集成,然后执行爬取

运行Actor,等待其完成,然后将其结果从Apify数据集提取到LangChain文档加载器中。

注意:Actor调用函数从爬取网站加载数据需要一些时间

# 向量存储:使用 Chroma 客户端进行初始化
from langchain.indexes import VectorstoreIndexCreator
from langchain_community.docstore.document import Document
from langchain_community.utilities import ApifyWrapper

apify = ApifyWrapper()
# 调用 Actor 以从已爬网的网页中获取文本
# 在 Apify 平台上运行 Actor 并等待结果准备就绪
loader = apify.call_actor(
    actor_id="apify/website-content-crawler",
    run_input={"startUrls": [{"url": "https://www.runoob.com/"}]},
    dataset_mapping_function=lambda item: Document(
        page_content=item["text"] or "", metadata={"source": item["url"]}
    ),
)

# 从爬取的文档初始化向量索引
index = VectorstoreIndexCreator().from_loaders([loader])

# 查询向量索引
query = "菜鸟教程有那些分类?"
result = index.query_with_sources(query)

print(result["answer"])
print(result["sources"])

执行时间过长,这里终止了,但从运行日志可以看见爬取的网站内容数据
在这里插入图片描述

使用Apify数据集

可以从Storage菜单栏处,找到运行Actor的Apify数据集,根据需要找到对应数据集ID。
在这里插入图片描述
如果在Apify数据集中已有一些结果,则可以使用直接加载它们

# 向量存储:使用 Chroma 客户端进行初始化
from langchain.indexes import VectorstoreIndexCreator
from langchain_community.docstore.document import Document
from langchain_community.utilities import ApifyWrapper
from langchain_community.document_loaders.apify_dataset import ApifyDatasetLoader


apify = ApifyWrapper()
# 调用 Actor 以从已爬网的网页中获取文本

loader = ApifyDatasetLoader(
    dataset_id="vVJS0LBdbhEfRFLqL",
    dataset_mapping_function=lambda dataset_item: Document(
        page_content=dataset_item["text"], metadata={"source": dataset_item["url"]}
    ),
)

# 基于已爬网数据创建矢量存储
index = VectorstoreIndexCreator().from_loaders([loader])

# 查询向量索引
query = "菜鸟教程有那些分类?"
result = index.query_with_sources(query)

print(result["answer"])
print(result["sources"])

执行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeDevMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值