尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Zencoder 中配置 Scrapeless MCP 服务器:网页爬虫完全指南

Zencoder 中配置 Scrapeless MCP 服务器:网页爬虫完全指南 1. Zencoder 里接 Scrapeless MCP 到底解决什么问题Zencoder 是围绕多代理工作流构建的 AI 编码编排平台VS Code 扩展和 JetBrains 插件两个入口都能用。Coding Agent 负责写实现Repo Info Agent 负责读代码库上下文Unit Testing Agent 补测试覆盖E2E Testing Agent 跑浏览器测试Ask Agent 做解释Web Dev Agent 处理 UI。本地代码这一侧它是完整的读仓库、规划改动、写 diff一条龙。问题出在任务需要当前公共网络数据的时候。Zencoder 默认的网页抓取命中的和任何匿名 HTTP 请求一样拿回来的是一个 JavaScript 空壳。商业站点上真正渲染出来的 DOM 藏在反机器人挑战、住宅代理保护的搜索结果页、以及纯 JavaScript 单页应用后面。你让代理「打开这个竞品定价页把套餐表格提取出来」目标站一旦挂在 Cloudflare Turnstile 后面这个任务就不再是确定性的了——代理要么拿到空壳要么直接吃一个 Access Denied。我试过在 Zencoder 里直接让 Coding Agent 去抓一个文档站返回的 HTML 里只有div idroot/div加一段 bundle 脚本正文一个字没有。这不是代理不聪明是它手里没有能渲染 JavaScript 的浏览器。Scrapeless MCP Server 就是补这一块的。它是一个协议级接口前面是 Scrapeless Scraping Browser——一个可定制的、抗检测的云浏览器专门给 AI 代理用——再加上 Scrapeless 的数据工具Google Search、Google Trends、页面级抓取助手。接进 Zencoder 之后每个代理手里多出 20 个 MCP 工具映射到一个强化云浏览器、一个 Google 搜索抓取器、一个趋势抓取器以及一次性的 HTML/Markdown/截图助手。代理按回合自己选调用哪个工具云浏览器负责 JavaScript 渲染、住宅代理出站、每会话反检测指纹IDE 继续管代码生成、文件树和终端。这篇文章要做的就是从零跑通一次可复现的爬取任务给出 MCP 服务器配置片段、Zencoder 侧连接参数、一次真实抓取请求的验证步骤最后说明怎么把 endpoint 改到 TaoToken 统一通道复用同一把 Key。适合谁需要在 VS Code 系工具里快速抓网页数据的开发者尤其是已经在用 Zencoder 写代码、想让代理顺手把外部数据也拉进来的那批人。一个 MCP 服务器服务所有 Zencoder 代理。这句话是这套方案的核心你不需要给每个 Agent 单独配一遍一个配置块Coding Agent、Repo Info Agent、Unit Testing Agent 全都拿到同一套工具面。2. 前置准备Scrapeless API Key 与 TaoToken 统一通道先说清楚这一节要拿到什么一把 Scrapeless 的 API Key一把 TaoToken 的 Key以及一个决定——你的 MCP 服务器走 Scrapeless 官方端点还是走 TaoToken 统一通道。两者不冲突可以先用官方端点跑通再切到统一通道复用同一把 Key。Scrapeless 这一侧注册账号后在设置 → API 密钥管理里创建一个 Key复制出来。新账户包含免费的 Scraping Browser 运行时够你把整条链路验证一遍。Node.js 需要 18 或更新版本因为 Zencoder 在 stdio 模式下会用npx把scrapeless-mcp-server当子进程拉起来。第一次运行npx -y scrapeless-mcp-server会下载包之后重启复用缓存版本。TaoToken 这一侧它的定位是统一通道你在这里拿一把 Key就能把模型调用和工具调用收敛到同一个出口不用在多个平台之间来回切 Key。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意这两个地址的差别官网带 UTM 参数用于归因API 基址不带配置里填的是后者。为什么要把 endpoint 改到 TaoToken三个实际理由。第一Key 复用你已经在 TaoToken 上有一把 Key 用于模型对话或 Coding Plan工具调用也走同一个出口管理成本降一半。第二统一计费和观测模型调用和爬取调用在一个面板里看排查问题时不用在两个后台之间跳。第三切换成本低MCP 配置里改一个url或baseUrl字段的事工具面完全不变代理感知不到后端换了。具体怎么拿 Key、怎么在控制台里建路径是模型对话入口 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat 、Coding Plan 入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_plan 、控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsole 、API Keys 管理 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keys 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdoc 。Claude Code 相关的接入参考 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode 。这里有个容易踩的坑Scrapeless 的 Key 和 TaoToken 的 Key 是两套东西别混。Scrapeless Key 用于云浏览器和数据工具本身TaoToken Key 用于统一通道的鉴权。如果你只是想让 Zencoder 的代理能抓网页Scrapeless Key 是必须的TaoToken 是让你把出口收敛、复用 Key 的那一层。两者在配置里各占一个字段下面会给完整片段。还有一个前置是 JSON 编辑的熟悉度。Zencoder 的 MCP 配置落在settings.json里VS Code 和 JetBrains 的 JSON 模式不一样——VS Code 把条目包在zencoder.mcpServers顶级键里JetBrains 用的是裸对象。这个差异后面会反复提到先记住。3. 可复制配置settings.json 里的 Scrapeless MCP 片段这一节是全文最该照着抄的部分。设置分五步JSON 模式在 VS Code 和 JetBrains 之间不同选你正在配的那个 IDE 抄。第一步拿 Scrapeless API Key。注册后打开仪表板设置 → API 密钥管理里创建复制值第三步要用。第二步打开 Zencoder 的 MCP 配置。两条路。路 A 是代理工具 UI两个 IDE 都推荐点 Zencoder 聊天面板右上角的…更多选项菜单选「代理工具」打开「自定义」标签点「添加自定义 MCP」填名称、命令、参数、环境UI 会替你写进settings.json。路 B 是直接编辑VS Code 在 Zencoder 聊天里打开…菜单 → 设置 → 向下滚到 MCP 服务器部分 → 点「在 settings.json 中编辑」JetBrains 打开 文件 → 设置macOS 是 JetBrains IDE → 设置→ 展开 工具 → Zencoder → MCP 服务器。第三步加 Scrapeless MCP 服务器。VS Code 的 stdio 模式目前 VS Code 上唯一支持的传输方式{ zencoder.mcpServers: { scrapeless: { command: npx, args: [-y, scrapeless-mcp-server], env: { SCRAPELESS_KEY: YOUR_SCRAPELESS_KEY } } } }JetBrains 的 stdio 模式注意是裸对象没有外层包装键{ scrapeless: { command: npx, args: [-y, scrapeless-mcp-server], env: { SCRAPELESS_KEY: YOUR_SCRAPELESS_KEY } } }保存文件。第一次运行npx -y scrapeless-mcp-server会下载包后续重启复用缓存。第四步或者用 HTTP 流式模式仅 JetBrains 2.13 及以上。JetBrains 2.13 支持 stdio、可流式 HTTP 和 OAuth2 三种传输VS Code 目前只支持 stdio流式 HTTP 和 OAuth2 在 Zencoder 文档里标着「即将推出」。如果你的代理跑在托管开发容器或 CI 沙箱里npx没法可靠地拉起长寿命子进程JetBrains 用户可以把 Zencoder 指向托管的 MCP 端点{ scrapeless: { type: streamable-http, url: https://api.scrapeless.com/mcp, headers: { x-api-token: YOUR_SCRAPELESS_KEY } } }同样的YOUR_SCRAPELESS_KEY在两种模式下都有效。VS Code 用户先留在第三步的 stdio 块里等 Zencoder 给 VS Code 发布流式 HTTP 再说。第五步把 endpoint 改到 TaoToken 统一通道。这一步是可选的但如果你想让工具调用和模型调用复用同一把 Key就在这里改。做法是在env里加一个 base URL 覆盖字段把出口指向 TaoToken{ zencoder.mcpServers: { scrapeless: { command: npx, args: [-y, scrapeless-mcp-server], env: { SCRAPELESS_KEY: YOUR_SCRAPELESS_KEY, TAOTOKEN_API_KEY: YOUR_TAOTOKEN_KEY, TAOTOKEN_BASE_URL: https://taotoken.net/api } } } }注意TAOTOKEN_BASE_URL填的是https://taotoken.net/api不带 UTM 参数。UTM 只用于官网跳转归因API 调用不需要。三件套在这里是齐的Base URL 是https://taotoken.net/apiKey 是YOUR_TAOTOKEN_KEYModel ID 按你在 TaoToken 控制台里选的填——如果你同时用 Zencoder 的模型路由Model ID 走 Zencoder 自己的设置MCP 这一层只关心工具调用出口。如果你用的是 Cline MCP 或 Codex 的auth.json那套逻辑是一样的Base URL、Key、Model ID 三件套缺一不可。Codex 的auth.json里对应的是OPENAI_BASE_URL和OPENAI_API_KEY两个字段指向https://taotoken.net/api和你的 TaoToken Key。CC Switch 这类切换工具也是同样的三件套结构只是字段名不同。配置写完JetBrains 需要重新打开项目VS Code 通常在重新加载窗口时拾取更改。下一步验证。4. 验证请求一次真实的定价页抓取配置保存、重载之后先做最小验证再跑真实任务。最小验证确保编码代理已启用在一个新的 Zencoder 聊天会话里输入用 Scrapeless 浏览器工具打开 https://example.com 并告诉我页面标题。代理应该依次调用browser_create、browser_goto、browser_get_text或browser_get_html然后回复「Example Domain」。返回正常说明 MCP 服务器已连接、API Key 有效、云浏览器可达。这一步别跳过它是后面所有任务的地基。真实任务定价页提取。在打开的工作区里输入使用 Scrapeless 浏览器工具打开 https://example-saas.com/pricing将计划网格滚动到底部并以 JSON 格式返回每个计划的名称、价格和功能要点。将结果保存到打开的工作空间中的 pricing.json。代理的规划用大白话描述调用browser_create建一个云浏览器会话调用browser_goto访问定价 URL调用browser_wait_for等计划卡片地标渲染出来这样提取跑在填充好的 DOM 上而不是 SPA 空壳上调用browser_scroll展开折叠部分然后browser_get_html把计划卡片解析成 JSON 数组卡片上缺的字段当null处理而不是让提取失败用browser_create返回的sessionId调browser_close最后用 Zencoder 内置的文件工具把数组写进pricing.json。你会得到的结果形状大概是这样[ { name: 入门版, price: $0 / 月, features: [1 个席位, 1,000 次事件/月, 社区支持] }, { name: 专业版, price: $29 / 月, features: [10 个席位, 100K 次事件/月, 电子邮件支持, 自定义域名] }, { name: 商业版, price: 联系销售, features: [无限席位, 自定义事件数量, 服务水平协议, 单点登录/SAML] } ]字段值是示例样本模式反映的是代理在提示提取定价网格时发出的内容。Zencoder 会把pricing.json放进工作区树并在对话记录里显示每次 MCP 工具调用逐步流程可审计。控制返回内容的几个表述技巧实测有效说「返回 JSON」或「作为 markdown」控制输出格式说「字段仅名称、价格」限制提取范围说「保存到工作空间中的path」在抓取后触发 Zencoder 内置文件工具说「在提取之前单击每个卡片」触发逐行browser_click加重新提取说「如果 HTML 提取失败则使用页面截图」回退到scrape_screenshot加多模态提取说「如果第一次响应为空则重试一次」在新会话里触发browser_close加browser_create重试。工具面一共 20 个分三类。浏览器原语browser_create、browser_goto、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、browser_go_back、browser_go_forward、browser_close。一次性页面助手scrape_html、scrape_markdown、scrape_screenshot。Google 数据工具google_search、google_trends。browser_*通过browser_create返回的sessionId共享状态scrape_*和 Google 工具是无状态的直接走 API 不建会话。工具参数在表面上用驼峰命名比如sessionId、proxyCountry。一个细节MCP 响应以content[0].text纯文本返回。无状态数据工具google_search、google_trends、scrape_html、scrape_markdown会在正文前加Response:\n\n前缀Zencoder 的规划器自动处理但你自己写脚本解析原始响应时要剥掉这个前缀。scrape_screenshot直接返回图像二进制browser_*返回文本载荷没有前缀。5. 常见报错排查401、local proxy failed、reading choices这一节按真实报错对照。每个症状给可能原因和修复动作。代理工具里没列出 scrapeless。原因是配置没加载。修复JetBrains 重新打开项目VS Code 重新加载窗口重新检查 JSON 路径确保文件能正常解析没有多余逗号。服务器返回Authentication failed或 401。原因是 API Key 错误或过期。修复从仪表板重新复制粘到env.SCRAPELESS_KEY里重启 Zencoder。如果你走的是 TaoToken 统一通道检查TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL是否配对Base URL 必须是https://taotoken.net/api别把官网地址填进去。npx第一次调用时挂起。原因是 npm 网络慢或注册表超时。修复在终端里先跑一次npx -y scrapeless-mcp-server预缓存包然后重启 Zencoder。MCP 启动期间出现initialize response或connection closed错误。原因是 JSON-RPC 握手期间 stdout 上写了非 JSON 内容。修复用当前的scrapeless-mcp-server构建日志写 stderrJSON-RPC 写 stdout确认没有 shell 包装器往启动横幅里注入内容。stdio 传输用 stdout 跑 JSON-RPC任何非 JSON 文本都会破坏握手。工具调用返回Access Denied。原因是 HTML 代理池在分配时返回了一个被标记的 IP。修复请求代理调用browser_close然后再次browser_create后续分配通常成功。local proxy failed或os error 10054、503。这两个都是住宅代理池上的瞬态会话启动错误。修复一次重试通常就成功——让代理调browser_close如果会话已创建再调browser_create或者把调用包在 2 到 3 次重试循环里。reading choices类报错。这个通常出现在你把模型调用也切到统一通道、但响应结构没对齐的时候。检查你的客户端是不是按 OpenAI 兼容格式解析choices[0].message.content如果走的是 Anthropic 兼容端点响应结构不同别混用解析逻辑。TaoToken 的接入文档里有各端点的响应示例对照一下。OAuth 相关报错。JetBrains 2.13 支持 OAuth2 传输但如果你在 VS Code 里配了 OAuth2会失败——VS Code 目前只支持 stdio。修复VS Code 用户回到 stdio 块等官方发布流式 HTTP 和 OAuth2。每次调用的区域控制不在 MCP 表面上。云浏览器按 Scrapeless 账户上配置的地区路由。需要每查询区域固定美国结果对德国结果对日本结果的工作流用scrapeless-scraping-browserCLI 加--proxy-country或者为不同默认区域保留多个 API Key。并发方面每个主机保持不超过 3 个并发会话比较稳。需要更高分发的批处理任务建议从工作池驱动 CLI而不是从单个代理并行发 MCP 调用。还有一个容易忽略的Scrapeless 直接从包安装不在 Zencoder 的 MCP 库目录里。截至撰写时它没被列进 IDE 内的 MCP 库目录直接粘第 3 步的 JSON 块别去库里搜。6. 把出口收敛到 TaoToken长期编码与 Agent 的 Key 复用跑通之后下一步是把出口收敛。你已经在 TaoToken 上有一把 Key 用于模型对话或 Coding Plan工具调用也走同一个出口管理成本降一半计费和观测在一个面板里看。具体动作在 MCP 配置的env里保留SCRAPELESS_KEY云浏览器和数据工具本身需要它加上TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL。Base URL 填https://taotoken.net/api。这样模型调用和工具调用复用同一把 TaoToken KeyScrapeless Key 只负责它自己那一层。如果你同时用 Claude Code 做润色或长文任务接入参考在 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode 配置逻辑和这里一致Base URL、Key、Model ID 三件套。Cline MCP 和 Codexauth.json也是同样的三件套结构只是字段名不同——Codex 用OPENAI_BASE_URL和OPENAI_API_KEYCline 在 MCP 设置里填 server 的 command/args/env。长期编码和 Agent 场景建议走 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_plan 。它适合那种代理要连续跑很多轮、每轮都可能触发工具调用的工作流Key 复用和额度管理都在一个地方。验证模型调用是否走通用模型对话入口试一次https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chat 。如果模型能正常回工具调用也能正常回说明统一通道这一层通了。排障和接入细节看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdoc 。Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keys 控制台在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsole 。最后说一个实测下来的经验把 endpoint 切到统一通道之后别急着删掉 Scrapeless 官方端点的配置留一份注释掉的备份。切换出问题时改回官方端点能快速定位是通道层的问题还是工具层的问题。这个习惯在排查reading choices和 401 这类报错时特别省时间。
返回列表