LlamaIndex
利用 LlamaIndex 与 Oxylabs 网页爬虫 API 的集成,轻松摄取在线内容并构建基于 LLM 的工作流。
LlamaIndex 与 Oxylabs 网页爬虫 API 使您能够在同一工作流中通过 LLM(大型语言模型)抓取并处理网页数据。
概览
LlamaIndex 是一个用于将外部数据源与 LLM 应用结合的数 据框架。将其与 Oxylabs 网页爬虫 API 一起用于:
抓取结构化数据而无需处理 CAPTCHA、IP 阻止或 JS 渲染
在同一管道中使用 LLM 处理结果
构建从提取到 AI 驱动输出的端到端工作流
快速开始
创建您的 API 用户凭证: 注册免费试用或在 Oxylabs 仪表板 注册试用或购买产品以创建您的 API 用户凭证(USERNAME 和 PASSWORD).
环境设置
在本指南中我们将使用 Python 编程语言。使用 pip 安装所需库:
pip install -qU llama-index llama-index-readers-oxylabs llama-index-readers-web在项目目录中创建一个 .env 文件,内含您的 Oxylabs 网页爬虫 API 凭证和 OpenAI API 密钥:
OXYLABS_USERNAME=your_API_username
OXYLABS_PASSWORD=your_API_password
OPENAI_API_KEY=your-openai-key在您的 Python 脚本中加载这些环境变量:
import os
from dotenv import load_dotenv
load_dotenv()集成方法
在 LlamaIndex 中通过 Web Scraper API 访问网页内容有两种方式:
Oxylabs Reader
该 llama-index-readers-oxylabs 模块包含可让您从各种来源抓取数据的特定类:
Google 网页搜索
OxylabsGoogleSearchReader
Google 搜索广告
OxylabsGoogleAdsReader
Amazon 产品
OxylabsAmazonProductReader
Amazon 搜索
OxylabsAmazonSearchReader
Amazon 评论
OxylabsAmazonReviewsReader
YouTube 文本转录
OxylabsYoutubeTranscriptReader
例如,您可以提取 Google 搜索结果:
import os
from dotenv import load_dotenv
from llama_index.readers.oxylabs import OxylabsGoogleSearchReader
load_dotenv()
reader = OxylabsGoogleSearchReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data({
'query': 'best pancake recipe',
'parse': True
})
print(results[0].text)Oxylabs Web 阅读器
使用 OxylabsWebReader 类,您可以从任何 URL 提取数据:
import os
from dotenv import load_dotenv
from llama_index.readers.web import OxylabsWebReader
load_dotenv()
reader = OxylabsWebReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data(
[
'https://sandbox.oxylabs.io/products/1',
'https://sandbox.oxylabs.io/products/2'
]
)
for result in results:
print(result.text + '\n')构建一个基础 AI 搜索代理
下面是一个可以搜索 Google 并回答问题的简单 AI 代理示例:
import os
import asyncio
from dotenv import load_dotenv
from llama_index.readers.oxylabs import OxylabsGoogleSearchReader
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI
load_dotenv()
reader = OxylabsGoogleSearchReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
def web_search(query: str) -> str:
results = reader.load_data({'query': query, 'parse': True})
return results[0].text
agent = FunctionAgent(
tools=[web_search],
llm=OpenAI(model='gpt-4o-mini'),
max_function_calls=1,
system_prompt=(
'Craft a short Google search query to use with the `web_search` tool. '
'Analyze the most relevant results and answer the question.'
)
)
async def main():
response = await agent.run('How did DeepSeek affect the stock market?')
print(response)
if __name__ == '__main__':
asyncio.run(main())高级配置
处理动态内容
Web Scraper API 可以处理 JavaScript 渲染:
reader = OxylabsWebReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data(
[
'https://quotes.toscrape.com/js/'
],
{'render': 'html'}
)设置用户代理类型
您可以指定不同的用户代理:
reader = OxylabsWebReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data(
[
'https://sandbox.oxylabs.io/products/1'
],
{'user_agent_type': 'mobile'}
)使用目标特定参数
许多目标特定的爬虫支持额外参数:
reader = OxylabsGoogleSearchReader(
os.getenv('OXYLABS_USERNAME'),
os.getenv('OXYLABS_PASSWORD')
)
results = reader.load_data({
'query': 'iphone',
'parse': True,
'domain': 'com',
'start_page': 2,
'pages': 3
})创建向量索引
LlamaIndex 在从网页内容构建向量索引方面特别有用:
import os
from dotenv import load_dotenv
from llama_index.readers.web import OxylabsWebReader
from llama_index.core import Settings, VectorStoreIndex
from llama_index.llms.openai import OpenAI
load_dotenv()
reader = OxylabsWebReader(
os.getenv('OXYLABS_USERNAME'), os.getenv('OXYLABS_PASSWORD')
)
documents = reader.load_data([
'https://sandbox.oxylabs.io/products/1',
'https://sandbox.oxylabs.io/products/2'
])
# 配置 LlamaIndex 设置
Settings.llm = OpenAI(model='gpt-4o-mini')
# 创建索引
index = VectorStoreIndex.from_documents(documents)
# 查询索引
query_engine = index.as_query_engine()
response = query_engine.query('What is the main topic of these pages?')
print(response)最后更新于
这有帮助吗?

