| name | eshop-data-extract |
| description | 电商数据采集技能包。通过浏览器自动化从淘宝(消费者视角)和万相台(商家视角)提取商品搜索、详情、评论、问大家、报表概览、计划明细等数据。当用户要求采集淘宝商品数据、拉取万相台报表、或执行电商数据分析前置采集时使用。 |
电商数据采集
通过浏览器自动化从淘宝和万相台提取数据。
浏览器环境
使用两种隔离的浏览器身份,分别对应不同账号状态。身份隔离由浏览器自动化 MCP 的启动参数或运行环境管理,执行采集时不要尝试在会话中切换或覆盖浏览器 profile。
| 身份 | 登录目标 | 用途 |
|---|
| 消费者 | login.taobao.com | 淘宝商品搜索、详情、评论、问大家 |
| 商家 | one.alimama.com | 万相台报表和计划数据 |
不要在同一个浏览器实例中混合使用两种身份。如果自动化工具已经通过 MCP 启动参数绑定了 profile,直接使用当前会话并先验证登录态。
使用当前运行环境可用的浏览器自动化工具执行导航、点击、输入、滚动、截图、网络监听等操作;不要假设或强制使用某一个具体浏览器实现。若当前浏览器上下文登录态无效,停止并说明需要登录,不要改用未登录的临时浏览器继续采集。
当用户明确要求使用 Patchright 等特定浏览器工具时,优先尊重用户指定工具,但仍必须先验证登录态、风控状态和页面可访问性。
登录态检查
执行任何采集前,先确认登录态是否有效:
- 消费者:导航到
https://www.taobao.com,检查顶部导航栏是否显示用户昵称(而非"亲,请登录")
- 商家:导航到
https://one.alimama.com,检查是否能正常进入万相台首页而非跳转到登录页
消费者登录态可以在淘宝首页和目标详情页交叉确认:若首页因缓存或首屏异常短暂显示"亲,请登录",但目标详情页顶部显示用户昵称且能访问评价/问大家等登录可见内容,可视为登录态有效。
如登录态失效,先执行登录流程(参见 resources/login.md)。
任务路由
根据用户需求选择对应流程:
| 任务 | 资源文件 | 身份 | 入参 |
|---|
| 登录 | resources/login.md | 消费者/商家 | platform |
| 商品搜索 | resources/taobao.md → 搜索 | 消费者 | keyword, sort, price_min, price_max, max_count |
| 商品详情 | resources/taobao.md → 详情 | 消费者 | item_id |
| 商品评论 | resources/taobao.md → 评论 | 消费者 | item_id, filter, max_count |
| 问大家 | resources/taobao.md → 问大家 | 消费者 | item_id, max_count |
| 报表概览 | resources/wxt.md → 报表概览 | 商家 | scene, start_date, end_date |
| 计划明细 | resources/wxt.md → 计划明细 | 商家 | scene, start_date, end_date, status, max_count |
通用原则
- 所有采集操作通过浏览器自动化完成,不使用 API 直连
- 淘宝数据通过 DOM 抓取提取
- 万相台数据通过 UI 交互触发请求,拦截 API 响应获取
- 每个 skill 只返回数据,不负责持久化
- 只采集用户已登录账号有权访问的数据;遇到权限不足、风控、验证码或二次确认时停止并请求用户手动处理
- 不绕过登录、验证码、访问控制、频率限制或平台风控;不要批量高速刷新、并发打开大量页面或构造未由 UI 触发的请求
- 所有任务必须限制采集规模:遵守各资源文件中的 max_count 上限;未提供 max_count 时使用默认值
- 淘宝详情、评论、问大家常以浮层形式展示完整数据。点击"查看全部评价"、"查看全部问答"、"查看全部回答"后,应优先在浮层 DOM 中抽取数据,并对浮层内部滚动容器滚动加载更多。
输出规范
- 返回 JSON 可序列化数据,不返回截图、HTML 原文或 cookie/token 等敏感凭据
- 用户未明确要求摘要时,返回完整采集结果;如果内容过长,按
detail、reviews、qa 分段返回完整 JSON,不要只返回 sample
- 金额、点击率、数量等可标准化字段转为 number;无法可靠解析时返回
null
- 列表字段没有数据时返回空数组,不省略字段
- 可选标量字段缺失时返回
null
- 保留平台原始文本字段时使用明确字段名,如
sales_text
- 列表型采集应包含
requested_count(本次计划采集量)、total 或 total_text(页面显示总量,无法数字化时保留原文)、fetched_count(实际返回条数)
- 错误结果使用
{ "success": false, "error": { "code": "...", "message": "..." } }