LangChain
在 Oxylabs 网页爬虫 API 旁使用 LangChain 框架,将网络数据提取并输送到 LLM 工作流中——在一个流水线中收集、处理和分析。
该 LangChain 与 Oxylabs 网页爬虫 API 使您能够在相同工作流中通过 LLM(大型语言模型)收集和处理网络数据。
概览
LangChain 是一个用于构建将 LLM 与工具、API 和网络数据结合使用的应用的框架。它同时支持 Python 和 JavaScript。与 以下 配合使用。 Oxylabs 网页爬虫 API 一起用于:
抓取结构化数据而无需处理 CAPTCHA、IP 阻止或 JS 渲染
在同一管道中使用 LLM 处理结果
构建从提取到 AI 驱动输出的端到端工作流
快速开始
创建您的 API 用户凭证:在 免费试用 注册或 在 产品 中 购买。 Oxylabs 仪表板 注册试用或购买产品以创建您的 API 用户凭证(USERNAME 和 PASSWORD).
如果您的账户需要不止一个 API 用户,请联系我们的 客户支持 或通过我们的 24/7 在线聊天支持留言。
在本指南中我们将使用 Python 编程语言。使用 pip 安装所需库:
pip install -qU langchain-oxylabs langchain-openai langgraph requests python-dotenv环境设置
在项目目录中创建一个 .env 在您的项目目录中创建一个 文件,包含您的 Oxylabs API 用户和 OpenAI 凭证:
OXYLABS_USERNAME=your-username
OXYLABS_PASSWORD=your-password
OPENAI_API_KEY=your-openai-key在您的 Python 脚本中加载这些环境变量:
import os
from dotenv import load_dotenv
load_dotenv()集成方法
将 Oxylabs Web Scraper API 与 LangChain 集成主要有两种方式:
使用 langchain-oxylabs 包
对于 Google 搜索查询,请使用 专用的 langchain-oxylabs 包,它提供了即用型的集成:
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain_oxylabs import OxylabsSearchAPIWrapper, OxylabsSearchRun
load_dotenv()
# 初始化您偏好的 LLM 模型
llm = init_chat_model(
"gpt-4o-mini",
model_provider="openai",
api_key=os.getenv("OPENAI_API_KEY")
)
# 初始化 Google 搜索工具
search = OxylabsSearchRun(
wrapper=OxylabsSearchAPIWrapper(
oxylabs_username=os.getenv("OXYLABS_USERNAME"),
oxylabs_password=os.getenv("OXYLABS_PASSWORD")
)
)
# 创建使用 Google 搜索工具的 agent
agent = create_react_agent(llm, [search])
# 示例用法
user_input = "When and why did the Maya civilization collapse?"
response = agent.invoke({"messages": user_input})
print(response["messages"][-1].content)使用 Web Scraper API
要访问除 Google 搜索以外的其他网站,您可以直接向 Web Scraper API 发送请求:
import os
import requests
from dotenv import load_dotenv
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
load_dotenv()
def scrape_website(url):
"""使用 Oxylabs Web Scraper API 抓取网站"""
payload = {
"source": "universal",
"url": url,
"parse": True
}
response = requests.post(
"https://realtime.oxylabs.io/v1/queries",
auth=(os.getenv("OXYLABS_USERNAME"), os.getenv("OXYLABS_PASSWORD")),
json=payload
)
if response.status_code == 200:
data = response.json()
content = data["results"][0]["content"]
return str(content)
else:
print(f"Failed to scrape website: {response.text}")
return None
def process_content(content):
"""使用 LangChain 处理抓取的内容"""
if not content:
print("No content to process.")
return None
prompt = PromptTemplate.from_template(
"分析以下网站内容并总结要点: {content}"
)
chain = prompt | OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
result = chain.invoke({"content": content})
return result
def main(url):
print("Scraping website...")
scraped_content = scrape_website(url)
if scraped_content:
print("Processing scraped content with LangChain...")
analysis = process_content(scraped_content)
print("\nProcessed Analysis:\n", analysis)
else:
print("No content scraped.")
if __name__ == "__main__":
url = "https://sandbox.oxylabs.io/products/1"
main(url)针对特定目标的爬虫
Oxylabs 提供 专门的爬虫 用于各种热门网站。以下是一些可用来源的示例:
google_search
query
Amazon
amazon_search
query, domain (可选)
Walmart
walmart_search
query
目标
target_search
query
Kroger
kroger_search
query, store_id
Staples
staples_search
query
要使用特定爬虫,请在 中修改负载 scrape_website 函数:
# Amazon 搜索示例
payload = {
"source": "amazon_search",
"query": "smartphone",
"domain": "com",
"parse": True
}高级配置
处理动态内容
Web Scraper API 可以通过 添加 来处理 JavaScript 渲染 通过添加 render 参数来压制警告/错误:
payload = {
"source": "universal",
"url": url,
"parse": True,
"render": "html"
}设置用户代理类型
您可以指定不同的 user agents 以模拟不同设备:
payload = {
"source": "universal",
"url": url,
"parse": True,
"render": "html",
"user_agent_type": "mobile"
}使用目标特定参数
许多 针对特定目标的爬虫 支持附加参数:
# Kroger 带位置参数的示例
payload = {
"source": "kroger_search",
"query": "organic milk",
"store_id": "01100002",
"fulfillment_type": "pickup"
}错误处理
为生产级应用实现适当的错误处理:
try:
response = requests.post(
"https://realtime.oxylabs.io/v1/queries",
auth=(os.getenv("OXYLABS_USERNAME"), os.getenv("OXYLABS_PASSWORD")),
json=payload,
timeout=60
)
response.raise_for_status()
# 处理响应
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except requests.exceptions.ConnectionError as conn_err:
print(f"Connection error occurred: {conn_err}")
except requests.exceptions.Timeout as timeout_err:
print(f"Timeout error occurred: {timeout_err}")
except requests.exceptions.RequestException as req_err:
print(f"An error occurred: {req_err}")最后更新于
这有帮助吗?

