给LangChain代理21个实时网页工具与无抓取MCP
Expert in Web Scraping Technologies
关键要点:
- LangChain代理通过一个客户端配置获得21个实时网页工具。
langchain-mcp-adapters包将LangChain应用程序连接到Scrapeless MCP服务器,并将整个工具表面——浏览器控制、页面抓取、谷歌搜索和趋势——返回为准备绑定的StructuredTool对象。 - 托管路径上不需要Node。 将客户端指向
https://api.scrapeless.com/mcp,通过可流式传输的HTTP与您的x-api-token连接;stdio路径(npx -y scrapeless-mcp-server)对于本地设置是相同的表面。 - 工具在任何模型参与之前就可以工作。
get_tools()列出它们,而ainvoke()直接执行它们——在实时URL上执行scrape_markdown返回页面的markdown——因此布线无需LLM密钥即可进行测试。 - 名字根据传输方式不同。 托管端点提供裸名称(
browser_goto、scrape_markdown、google_search);stdio服务器将其命名为scrapeless_*。两种方式均为同样的21个工具。 - 从工具到代理是一个构造函数。 将返回的工具绑定到任何LangChain聊天模型,代理可以在其推理循环中搜索、浏览和抓取实时网页。
- 免费开始。 新的Scrapeless账户包括免费试用积分——在app.scrapeless.com注册。
您可以用它做什么
- 读取实时网页的研究代理。 使用
google_search进行发现,使用scrape_markdown提取干净的页面文本——代理循环的检索部分,无需构建抓取器。 - 浏览器驱动代理。 十六个
browser_*工具(创建、访问、单击、输入、滚动、截图、快照、等待)使代理能够以真实的反检测云浏览器会话进行操作。 - 市场和趋势监控。
google_trends加上定期抓取将LangChain管道转变为监控服务。 - 工具驱动的RAG。 按需以markdown格式抓取页面,而不是预先索引所有内容,让代理决定阅读内容。
- 一个授权用于所有。 驱动抓取器API角色的相同Scrapeless API密钥驱动MCP工具表面。
为什么选择Scrapeless MCP服务器
MCP(模型上下文协议)为将工具交给代理提供标准接口,而LangChain通过官方适配器包与之通讯。在该协议的另一侧,Scrapeless MCP服务器将抓取基础设施作为21个类型工具公开:在抓取浏览器上的云浏览器会话、一次性页面抓取到HTML、Markdown或截图,以及谷歌搜索和趋势。代理获得能力;渲染、反检测和代理路由仍然保留在服务器端。
这一组合很重要,因为LangChain代理的效用取决于其工具。一个可以规划但无法抓取实时页面的模型只能使用训练数据回答;拥有这种工具表面的同一模型能够读取其正在推理的网页。
前提条件
- Python 3.10+和虚拟环境。
- 一个Scrapeless账户和API密钥——在app.scrapeless.com注册。
- 对于可选的stdio传输:Node.js 18+(托管HTTP路径不需要Node)。
bash
export SCRAPELESS_API_KEY=your_api_token_here
连接
1. 安装适配器
bash
pip install langchain-mcp-adapters langchain-core
2. 配置客户端并验证工具数量
托管端点是最快的路径——纯HTTPS,通过x-api-token头进行身份验证:
python
# handshake.py — 连接LangChain与Scrapeless MCP服务器,列出工具
import asyncio
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
async def main():
client = MultiServerMCPClient({
"scrapeless": {
"transport": "streamable_http",
"url": "https://api.scrapeless.com/mcp",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
})
tools = await client.get_tools()
names = sorted(t.name for t in tools)
print(f"工具数量: {len(names)}")
print("名称:", ", ".join(names))
asyncio.run(main())
正确的握手会打印 21 个工具:
browser_click, browser_close, browser_create, browser_get_html, browser_get_text, browser_go_back, browser_go_forward, browser_goto, browser_press_key, browser_screenshot, browser_scroll, browser_scroll_to, browser_snapshot, browser_type, browser_wait, browser_wait_for, google_search, google_trends, scrape_html, scrape_markdown, scrape_screenshot
3. 或者在本地通过stdio运行服务器
相同的表面船只作为本地设置的npm包 — 标准的MCP配置结构,密钥作为环境变量传递:
json
{
"scrapeless": {
"command": "npx",
"args": ["-y", "scrapeless-mcp-server"],
"transport": "stdio",
"env": { "SCRAPELESS_KEY": "your_api_token_here" }
}
}
需要预期的一个传输级别的区别是:stdio服务器给其工具名称命名空间为scrapeless_*,而托管端点直接提供其功能。通过名称查找工具的代码应与后缀匹配。
在免费计划中获取您的API密钥:app.scrapeless.com
您实际上如何使用它:调用工具,然后交给代理
返回的对象是普通的LangChain StructuredTool,意味着它们是直接运行的 — 不需要模型。最简要的证明连接从头到尾工作:
python
# invoke_tool.py — 通过适配器直接执行一个MCP工具
import asyncio
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
async def main():
client = MultiServerMCPClient({
"scrapeless": {
"transport": "streamable_http",
"url": "https://api.scrapeless.com/mcp",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
})
tools = {t.name: t for t in await client.get_tools()}
result = await tools["scrape_markdown"].ainvoke(
{"url": "https://www.scrapeless.com/zh/blog/best-llm-scrapers-2026"}
)
text = result if isinstance(result, str) else str(result)
print(f"scrape_markdown 返回了 {len(text):,} 字符的markdown")
asyncio.run(main())
在实时运行中,这返回了完整的文章作为markdown — 从一次工具调用中获取数万个干净页面文本字符。
将工具绑定到代理的方式与LangChain中一贯的构造函数相同 — 将您的堆栈使用的任何聊天模型带来(模型API密钥是本指南未涵盖的前提条件):
python
# agent.py — 将MCP工具附加到LangChain代理(需要模型API密钥)
from langchain.agents import create_agent
agent = create_agent(model, tools) # `tools` 来自client.get_tools(), `model` = 你的聊天模型
result = agent.invoke({
"messages": [{"role": "user", "content": "搜索Scrapeless并总结顶部结果。"}]
})
从代理的角度来看,工具只是它可能调用的函数:它计划、选择google_search、读取、选择scrape_markdown、再次读取,并从实时内容中回答。
Scrapeless MCP工具表面
| 组别 | 工具 | 它们的功能 |
|---|---|---|
| 浏览器会话 | browser_create, browser_goto, browser_click, browser_type, browser_press_key, browser_scroll, browser_scroll_to, browser_go_back, browser_go_forward, browser_wait, browser_wait_for, browser_snapshot, browser_get_html, browser_get_text, browser_screenshot, browser_close |
一步一步操作云反检测浏览器 — 会话在调用间持续 |
| 页面抓取 | scrape_html, scrape_markdown, scrape_screenshot |
以原始HTML、干净的markdown或图像一键获取任何URL |
| Google数据 | google_search, google_trends |
结构化搜索结果和趋势数据 |
您将收到什么
工具结果以MCP内容部分的形式到达,适配器将其暴露给LangChain — 对于抓取工具,负载是页面本身。上面的scrape_markdown调用返回渲染的文章作为可供分割器、总结器或代理自身上下文窗口使用的markdown文本。浏览器工具以相同方式返回其观察结果(快照、提取文本、截图),这使得在代理循环中进行多步骤浏览成为现实。
结论:一个配置块,一个具备网络能力的代理
集成确实很小:安装适配器,给MultiServerMCPClient托管的URL和您的令牌,然后get_tools()为LangChain提供21种实时网页功能。通过工具数量进行验证,通过一个直接的ainvoke证明,然后将相同的列表绑定到您的代理。 Mastra集成指南展示了将同一服务器连接到TypeScript代理框架的方式 — 相同的表面,不同的主机。
准备好让您的代理连接实时网络了吗?
加入我们的社区,申请一个免费计划,并与正在构建代理管道的开发者联系:Discord · Telegram。
在 app.scrapeless.com 注册以获取免费试用积分——定价 覆盖当前的服务等级——并将您的 LangChain 代理指向它们应该读取的页面。
常见问题
问:我需要 Node.js 吗?
仅对 stdio 传输需要,它会在本地生成 npm 包。托管的 https://api.scrapeless.com/mcp 端点是纯 HTTPS——Python 仅堆栈可在无 Node 的情况下使用它。
问:我该如何进行身份验证?
托管的端点以 x-api-token: <您的密钥> 作为请求头;stdio 服务器从其环境中读取 SCRAPELESS_KEY。两个传输使用相同的密钥——在 app.scrapeless.com 免费计划上创建。
问:我该如何验证集成是否正确连接?
有两个检查,都是无模型的:get_tools() 返回 21 个工具,而对真实 URL 进行直接 ainvoke 的 scrape_markdown 返回页面的 markdown 格式。如果两个都通过,代理绑定就是剩下的唯一步骤。
问:为什么我本地服务器和托管端点之间的工具名称不同?
stdio 包将名称命名空间为 scrapeless_*;托管的端点则直接提供它们。如果您的代码需要在两者之间工作,请匹配后缀。
问:我可以不使用代理就用这些工具吗?
可以——它们是 StructuredTool 对象,可以通过 ainvoke 独立运行,这也使它们可以在普通的 LangChain 链和 LangGraph 节点中使用,而不仅仅是代理中。
问:通过这些工具访问网站是否合法?
这些工具通过 Scrapeless 基础设施获取公开可访问的页面。不同的司法管辖区和网站条款的规则各异——请查看您代理读取的网站的服务条款,并为您的用例咨询律师。绝不要收集受 GDPR 或 CCPA 保护的个人数据。
问:运行的费用是多少?
工具调用与平台其余部分使用相同的基于使用量的 Scrapeless 账户,并且新账户开始时会有免费试用积分。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



