将AI代理连接到实时网络数据:AWS Strands + Scrapeless MCP服务器集成指南
Lead Scraping Automation Engineer
关键要点:
- AWS Strands SDK + Scrapeless MCP 为 AI 代理提供了一个类型化的网络数据工具表面。 代理通过代理循环直接调用
google_search、scrape_html、scrape_markdown和完整的浏览器会话工具(browser_create→browser_goto→browser_wait_for→browser_get_html→browser_close),无需围绕 REST API 的胶水代码。 - 托管端点上的 21 个 MCP 工具(
https://api.scrapeless.com/mcp)。浏览器会话控制(16 个工具)、搜索(google_search、google_trends)和无状态抓取(scrape_html、scrape_markdown、scrape_screenshot)——由scrapeless-mcp-server在可流式传输的 HTTP 上公开。托管端点报告serverInfo.name: "scrapeless-mcp-server",在出版时版本为 0.2.0。 - 云浏览器带有住宅代理出口。 页面在 Scrapeless 抓取浏览器 中呈现,然后代理读取 DOM,因此 JavaScript 密集型目标在没有本地浏览器基础设施的情况下也能工作。通过网站的通行率有所不同:简单的挑战页面在短暂的
browser_wait后可以通过,而具有更严格的机器人检测层的网站仍可能阻止默认 MCP 会话——对于这些目标,退回到带有预先配置的浏览器配置文件的 SDK 表面。 - 模型无关的代理循环。 Strands 的感知 → 推理 → 行动循环让 Claude(或任何支持的模型)自主决定工具调用。此指南使用通过 Strands Anthropic 提供的 Anthropic Claude。
- 免费开始。 新的 Scrapeless 账户包括免费的抓取浏览器运行时——在 scrapeless 网站 注册,并在超出使用限制后查看 定价 页面。
由大型语言模型(LLMs)驱动的 AI 代理可以推理和做出决策,但它们受到训练数据的限制。要构建真正有用的代理,您需要将它们连接到实时网络数据。此指南向您展示如何将 AWS Strands SDK 与 Scrapeless 的 MCP 服务器 结合起来,创建可以访问和分析实时网络数据的自主 AI 代理。
在本指南中,您将学习:
- AWS Strands SDK 是什么,以及它为何成为构建 AI 代理的有用框架。
- 为什么 AWS Strands SDK 能与 Scrapeless 的 MCP 服务器无缝配合,适用于网络感知代理。
- 如何将 AWS Strands 与 Scrapeless 的 MCP 服务器集成,以创建一个自主的竞争情报代理。
- 如何构建能够根据其目标自主决定使用哪些网络抓取工具的代理。
让我们开始吧。
您可以用它做什么
- 竞争情报循环。 搜索竞争对手名称的
google_search,然后在顶部结果上调用scrape_markdown来总结定位和最近的发布。 - 单页增强。 针对 ASIN 或产品页面驱动
browser_create→browser_goto→browser_wait_for→browser_get_html→browser_close,让模型将标题、价格、评分和可用性提取到您在提示中定义的 JSON 格式中。 - 多区域价格检查。 针对同一 SKU 在不同国家的店面运行两个
browser_create会话,并在一个响应中比较价格。 - 搜索引擎驱动的研究。 结合
google_search+google_trends对某个主题进行动量读取,然后使用scrape_markdown深入个别文章。 - 合规的截图捕获。 使用
scrape_screenshot( URL 输入,PNG 输出)或在 UI 交互后使用会话中的browser_screenshot来保留某个时间点页面的证据。 - 多步骤 UI 流程。
browser_click、browser_type、browser_press_key和browser_scroll让代理在一个持久会话内驱动表格、日志门和懒加载网格。
在 Scrapeless,我们仅访问公开可用的数据,并严格遵守适用的法律、法规和网站隐私政策。此文内容仅用于演示目的。
什么是 AWS Strands SDK?
AWS Strands SDK 是一个用于构建 AI 代理的 Python 框架,由 AWS 在 PyPI 上发布(strands-agents,作者 opensource@amazon.com)。它公开了一个 Agent 类,接受一个模型和工具列表,并运行感知 → 推理 → 行动循环,直到任务完成。
此指南使用 SDK 中在发布包中验证存在的三个部分:
from strands import Agent— 代理类本身。from strands.models.anthropic import AnthropicModel— Anthropic 提供程序;构造函数签名为AnthropicModel(*, client_args: dict | None = None, **model_config),接受model_id、max_tokens、params={"temperature": ...}。from strands.tools.mcp import MCPClient— 封装 MCP 传输,以便将任何 MCP 服务器的工具传递给Agent(tools=...)。
代理的结果类型为strands.agent.agent_result.AgentResult,这是一个数据类,包含字段stop_reason、message、metrics、state(以及可选的interrupts、structured_output)。
循环运行方式
- 用户将提示传递给
agent.invoke_async(prompt)。 - 模型接收提示和可用工具的列表。
- 它要么返回最终消息,要么发出工具调用。
- 如果调用了工具,Strands 将运行它并将结果反馈给模型。
- 第 3 步到第 4 步重复,直到模型返回最终消息。
为什么将 AWS Strands SDK 和 Scrapeless 的 MCP 服务器结合用于网页数据检索
LLM 本身无法获取实时网页数据。为了赋予 Strands 代理这一能力,您将其连接到一个公开网页工具的 MCP 服务器。scrapeless-mcp-server 就是其中一个 MCP 服务器——由 Scrapeless 爬虫浏览器支持,这是一个通过住宅代理进行出口的云托管浏览器。
经过验证的实时工具(https://api.scrapeless.com/mcp 下的 tools/list,今天):21 个工具,分为三组:
- 无状态抓取 —
scrape_html、scrape_markdown、scrape_screenshot。 - 搜索 —
google_search、google_trends。 - 持久的浏览会话 —
browser_create、browser_goto、browser_go_back、browser_go_forward、browser_wait、browser_wait_for、browser_get_html、browser_get_text、browser_snapshot、browser_click、browser_type、browser_press_key、browser_scroll、browser_scroll_to、browser_screenshot、browser_close。
请在 scrapeless 网站 获取您的 Scrapeless 免费计划 API 密钥。MCP 服务器源代码位于 github.com/scrapeless-ai/scrapeless-mcp-server。
如何在 Python 中将 AWS Strands SDK 与 Scrapeless MCP 服务器集成
在本节中,您将使用 AWS Strands SDK 构建一个具备从 Scrapeless MCP 服务器抓取和检索实时数据能力的 AI 代理。
作为示例,本指南构建一个 竞争情报代理,能够自主分析市场和竞争对手。代理根据其目标决定使用哪些工具,从而展示代理循环的强大。
请按照以下逐步指南,使用 AWS Strands SDK 构建您的 Claude + Scrapeless MCP 驱动的 AI 代理。
前提条件
要复制代码示例,请确保您具备以下条件:
软件要求:
- Python 3.10 或更高版本。
- Node.js(推荐使用最新的 LTS 版本)。
- Python IDE,例如带有 Python 扩展的 VS Code 或 PyCharm。
账户要求:
- 一个 Scrapeless 账户及 API 密钥 — 在 scrapeless 注册。
- 一个具有 Claude API 访问权限和积分的 Anthropic 账户。
背景知识(有用但不是必需的):
- 对 MCP 工作原理的基本了解。
- 对 AI 代理及其能力的熟悉。
- 对 Python 中异步编程的基本知识。
步骤 #1:创建您的 Python 项目
打开终端并创建项目的新文件夹:
bash
mkdir strands-scrapeless-agent
cd strands-scrapeless-agent
设置 Python 虚拟环境:
bash
python -m venv venv
激活虚拟环境:
bash
# 在 Linux/macOS 上:
source venv/bin/activate
# 在 Windows 上:
venv\Scripts\activate
创建主 Python 文件:
bash
touch agent.py
您的文件夹结构应如下所示:
strands-scrapeless-agent/
├── venv/
└── agent.py
现在您已经有一个准备好构建具备网页数据访问的 AI 代理的 Python 环境。
步骤 #2:安装 AWS Strands SDK
在已激活的虚拟环境中,安装所需的软件包:
bash
pip install "strands-agents>=1.0" anthropic "mcp>=1.0" python-dotenv
这将安装:
strands-agents:用于构建 AI 代理的 AWS Strands SDK。anthropic:strands.models.anthropic.AnthropicModel所需的对等依赖项。mcp:官方 MCP Python SDK,所需的mcp.client.streamable_http传输。python-dotenv:用于环境变量管理。
接下来,将以下导入添加到您的 agent.py 文件中:
python
from strands import Agent
from strands.models.anthropic import AnthropicModel
from strands.tools.mcp import MCPClient
from mcp.client.streamable_http import streamablehttp_client
您现在可以使用 AWS Strands SDK 构建代理。
步骤 #3:设置环境变量
在您的项目文件夹中创建 .env 文件以安全管理 API 密钥:
bash
touch .env
在 .env 文件中添加您的 API 密钥:
ini
# Anthropic API 用于 Claude 模型
ANTHROPIC_API_KEY=your_anthropic_key_here
# Scrapeless 凭证用于通过 MCP 抓取网页
SCRAPELESS_KEY=your_scrapeless_key_here
在您的 agent.py 中设置环境变量加载:
python
import os
从dotenv导入load_dotenv
load_dotenv()
读取API密钥
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
SCRAPELESS_KEY = os.getenv("SCRAPELESS_KEY")
您现在已设置好从`.env`文件安全加载API密钥。
---
### 第4步:验证Scrapeless MCP端点
本指南使用托管的可流式传输HTTP端点`https://api.scrapeless.com/mcp`。不需要本地安装。
使用`curl`对托管的端点进行烟雾测试:
```bash
curl -X POST "https://api.scrapeless.com/mcp" \
-H "x-api-token: $SCRAPELESS_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1.0"}}}'
成功的响应将返回:
- HTTP
200 OK,Content-Type: text/event-stream - 一个
mcp-session-id头 — 在后续的tools/list和tools/call请求中重用该头 - 一个主体事件
data: {"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"scrapeless-mcp-server","version":"0.2.0",...}},...}
在出版时已针对实时端点进行了测试:返回21个MCP工具和上述显示的serverInfo。
在免费计划中获取您的API密钥:app.scrapeless.com
完整的SDK和CLI参考:scrapeless网站。
第5步:初始化Strands模型
在您的agent.py中配置Anthropic Claude模型:
python
# 初始化Anthropic模型(通过Strands Anthropic提供者的Claude)
model = AnthropicModel(
client_args={"api_key": ANTHROPIC_API_KEY},
model_id="claude-sonnet-4-6",
max_tokens=4096,
params={"temperature": 0.3}
)
这将Claude配置为您代理的LLM,参数经过调整以获得一致、集中响应。client_args字典是传递Anthropic客户端配置的官方Strands方式(请参阅AWS Strands Anthropic提供者文档)。
第6步:连接到Scrapeless MCP服务器
创建MCP客户端配置以连接到托管的可流式传输HTTP端点:
python
import asyncio
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def http_transport():
"""流式HTTP传输至托管的Scrapeless MCP端点。"""
return streamablehttp_client(
url="https://api.scrapeless.com/mcp",
headers={"x-api-token": SCRAPELESS_KEY},
)
async def connect_mcp_tools():
"""连接到Scrapeless MCP服务器并发现工具。"""
logger.info("连接到Scrapeless MCP服务器(HTTP)...")
mcp_client = MCPClient(http_transport)
with mcp_client:
tools = mcp_client.list_tools_sync()
logger.info(f"发现了 {len(tools)} 个MCP工具")
for tool in tools:
logger.info(f" - {tool.tool_name}")
return mcp_client, tools
在实时端点进行了测试:上述调用序列记录了发现了 21 个MCP工具,后跟表格中列出的所有21个工具名称。
可用的Scrapeless MCP工具
下面的列表总结了Scrapeless MCP服务器在可流式传输HTTP传输中公开的工具。list_tools_sync()在运行时返回相同的集合。
| 工具 | 目的 |
|---|---|
browser_create |
分配一个Scrapeless云浏览器会话 |
browser_close |
释放会话 |
browser_goto |
导航到一个URL |
browser_go_back / browser_go_forward |
在会话历史中移动 |
browser_wait_for |
等待CSS选择器出现 |
browser_wait |
等待指定的毫秒固定时间 |
browser_get_html |
读取完整渲染的DOM |
browser_get_text |
读取当前页面的可见文本 |
browser_snapshot |
捕获页面的可访问性快照 |
browser_click |
按选择器点击元素 |
browser_type |
在输入字段中输入文本 |
browser_press_key |
发送诸如PageDown或Enter的按键 |
browser_scroll |
滚动当前页面 |
browser_scroll_to |
将特定元素滚动到可见位置 |
browser_screenshot |
捕获PNG格式的屏幕截图 |
google_search |
执行Google搜索查询并返回结果 |
google_trends |
获取关键词的Google趋势数据 |
scrape_html |
获取任何URL的渲染HTML |
scrape_markdown |
获取一个URL并返回可读的Markdown |
scrape_screenshot |
捕获任何URL的屏幕截图 |
第7步:定义竞争情报代理
创建一个具有专业提示的竞争情报代理:
python
def create_agent(model, tools):
创建一个具有网络数据访问能力的竞争情报代理。
async def connect_mcp_tools():
"""连接到Scrapeless MCP服务器并发现工具。"""
logger.info("正在连接到Scrapeless MCP服务器(HTTP)...")
mcp_client = MCPClient(http_transport)
with mcp_client:
tools = mcp_client.list_tools_sync()
logger.info(f"发现{len(tools)}个MCP工具")
for tool in tools:
logger.info(f" - {tool.tool_name}")
return mcp_client, tools
def create_agent(model, tools):
"""创建一个拥有网络数据访问的竞争情报代理"""
system_prompt = """您是一位拥有通过Scrapeless MCP服务器访问网络数据工具的专家竞争情报分析师。
使命
利用实时网络数据进行全面市场与竞争分析。
可用MCP工具(Scrapeless)
- google_search, google_trends
- scrape_html, scrape_markdown, scrape_screenshot
- browser_create, browser_close
- browser_goto, browser_go_back, browser_go_forward
- browser_wait_for, browser_wait
- browser_get_html, browser_get_text, browser_snapshot
- browser_click, browser_type, browser_press_key
- browser_scroll, browser_scroll_to
- browser_screenshot
自主分析流程
当给予分析任务时,自主:
- 基于目标决定使用哪些工具。
- 从多个来源收集全面数据。
- 将发现综合成可行的见解。
- 提供具体的战略建议。
在工具选择上要积极主动。您可以自由使用任何组合的工具。"""
return Agent(
model=model,
tools=tools,
system_prompt=system_prompt
)
async def main():
"""运行竞争情报代理"""
print("AWS Strands + Scrapeless MCP 竞争情报代理")
print("=" * 70)
try:
mcp_client, tools = await connect_mcp_tools()
agent = create_agent(model, tools)
print("\n代理准备就绪,具有网络数据访问权限。")
print("\n开始分析...")
print("-" * 40)
prompt = """
分析特斯拉在电动车市场的竞争地位。
研究:
- 当前产品线及定价策略。
- 主要竞争对手及其产品。
- 最近的战略公告。
- 市场份额和定位。
使用Scrapeless工具从tesla.com和搜索结果中收集实时数据。
"""
with mcp_client:
result = await agent.invoke_async(prompt)
print("\n分析结果:")
print("=" * 50)
print(result)
print("\n分析完成。")
except Exception as e:
logger.error(f"错误:{e}")
print(f"\n错误:{e}")
if name == "main":
asyncio.run(main())
正如第8步中所述,`invoke_async`返回一个`AgentResult`,它的属性包括`message`、`stop_reason`、`metrics`和`state`。如果您只想要助手文本而不是包装字符串,请使用`print(result.message)`。
执行AI代理的命令为:
```bash
python agent.py
该脚本将连接到Scrapeless MCP服务器,运行list_tools_sync()(返回21个工具—在写作时对托管端点进行了实时验证),实例化代理,并调用agent.invoke_async(prompt)。模型决定调用哪些工具。代理在给定运行时实际执行的操作取决于模型选择——Strands不会限制工具序列。
结论
本指南将AWS Strands SDK连接到Scrapeless的MCP服务器:约100行Python,提供给模型的21个经过验证的MCP工具,以及一个通过Scrapeless Scraping Browser和住宅代理出口的验证数据路径。
在app.scrapeless.com获取API密钥。
准备构建您的AI驱动数据管道吗?
加入我们的社区以获取免费计划,并与构建AWS Strands + Scrapeless MCP代理的开发者联系:Discord · Telegram。
在app.scrapeless.com注册以获取免费的Scraping Browser运行时,并将上述AWS Strands集成适应您的团队所需的工作流程。完整参考见docs.scrapeless.com。有关驱动这些工具的Scraping Browser运行时的更深入背景,请参见Scrapeless Scraping Browser产品页面及我们关于将Scrapeless与LangChain代理集成的指南。
常见问题解答
Q1:什么是MCP,它对AI代理有什么意义?
MCP(模型上下文协议)是一种用于将AI代理连接到工具和数据源的开放标准。MCP服务器公开一个类型化工具列表,任何MCP感知的客户端——包括AWS Strands SDK——都可以调用。通过Scrapeless MCP,代理可以获取对真实云浏览器、搜索引擎查询以及Markdown/HTML抓取的类型化访问,而无需编写每个API的粘合代码。代理在代理循环内决定调用哪些工具;MCP携带类型化的架构和结果。
Q2:托管的MCP端点可以给我什么?
https://api.scrapeless.com/mcp(带有x-api-token头)返回完整的21个工具列表,并已在本指南中通过Strands的MCPClient进行了端到端验证。无需本地Node运行时或后台进程——streamablehttp_client(...)只需一个导入和一个URL。
Q3:代理循环如何处理工具故障或反机器人挑战?
Strands将工具的结果——包括错误——反馈给模型,模型决定是重试、切换工具还是展示故障。对于Scrapeless,常见的恢复方式是browser_close加一个新的browser_create,或从完整的浏览器会话回落到scrape_markdown / scrape_html。每次调用的代理区域不是MCP browser_create工具公开的参数——scrapeless-mcp-server/src/session-manager.ts仅前向session_ttl、profile_id和profile_persist。要固定特定区域,请在仪表板中创建一个带有国家信息的Scrapeless配置文件,并通过MCP服务器上的BROWSER_PROFILE_ID环境变量引用它。
Q4:这可以在没有AI代理的情况下运行吗?
可以。每个Scrapeless MCP工具都可以通过普通的Python脚本或对流式HTTP端点的curl调用(步骤#4中的curl返回serverInfo.name: "scrapeless-mcp-server"和一个可在后续tools/list和tools/call请求中重复使用的mcp-session-id头)。AWS Strands SDK在此基础上添加了代理循环。
Q5:除了Claude Sonnet,还有哪些模型可以使用?
Strands的AnthropicModel接受任何Anthropic API公开的模型ID——claude-haiku-*用于更便宜的提取和总结循环,claude-opus-*用于更重的多步骤推理。Strands还提供OpenAIModel、BedrockModel、GeminiModel和Mistral、Ollama、LiteLLM、llamacpp以及SageMaker的提供者。只需更换模型行;其余的agent.py保持不变。
任何与OpenAI API兼容的端点也可以通过OpenAIModel与base_url覆盖来使用。已在本指南中针对OpenRouter进行了端到端验证:
python
from strands.models.openai import OpenAIModel
model = OpenAIModel(
client_args={
"api_key": OPENROUTER_API_KEY,
"base_url": "https://openrouter.ai/api/v1",
},
model_id="openai/gpt-4o-mini", # 或者anthropic/claude-3.5-sonnet、google/gemini-flash-1.5等。
params={"temperature": 0.3},
)
通过这个更换,同样的Agent(model=..., tools=tools, system_prompt=...)在OpenRouter目录上运行。为本指南测试了openai/gpt-4o-mini:代理自动调用google_search三次和scrape_markdown一次,以stop_reason: end_turn返回了一个干净的答案,每次运行大约为$0.001。
Q6:我如何处理如ERR_TUNNEL_CONNECTION_FAILED或503等瞬态错误?
这两者都来自Scrapeless出口池,通常是瞬态的。Strands的循环已将错误反馈给模型,模型将在下一个回合重试。为了在提示中实现确定性的恢复,请指导代理:“如果浏览器工具返回隧道或503错误,请调用browser_close并在重试之前启动新的browser_create。” 这种表述比依赖模型来决定更能产生更干净的重试。
Q7:多个代理可以共享MCP连接吗?
MCPClient每个with mcp_client:上下文打开一个会话。对于并行代理,给每个代理各自的MCPClient实例(因此在托管端点上有自己的会话ID),而不是复用一个。托管端点可以与并发会话一起扩展;每个账户的并发限制在Scrapeless定价层中。
Q8:我如何在此基础上插入我自己的非Scrapeless工具?
Agent(tools=...)接受一个列表。传递tools + my_extra_tools,其中my_extra_tools是任何兼容Strands的工具(用@tool装饰的函数,或来自其他MCP服务器的工具)。模型看到架构的并集,并决定调用哪些工具。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



