返回 Skill 列表
extension
分类: 数据与分析无需 API Key

multi-agent-universal-scraper

Use when 用户需要从任意网页采集数据,支持输入网址、用户名、密码登录任何网站,自动抓取表格数据并导出Excel。采用多Agent协作:研究员分析页面结构、开发者适配选择器、测试员验证完整性、评审员评估质量。触发词:帮我采集这个网页、抓取这个网页数据、帮我抓一下这个网站、数据采集、采集订单、下载报表、/采集。

person作者: user_31070f98hubcommunity

通用智能网页数据采集 (universal-scraper)

输入网址,自动分析页面结构并采集数据,用户只需确认字段映射。

核心特性

| 特性 | 说明 | |------|------| | 智能页面分析 | AI自动检测表单、表格、分页结构 | | 自然语言交互 | 用户用自然语言描述需求,AI自动解析 | | 多Agent协作 | 研究员分析 → 开发者适配 → 测试员验证 → 评审员确认 | | 预置模板市场 | 电商、民宿、订单管理等场景一键启动 | | 自动错误恢复 | 多种错误自动尝试修复,无需用户干预 |

使用方式

方式一:自然语言触发(推荐)

"帮我采集这个网页的数据:https://xxx.com/orders"
"登录xxx.com,抓取最近一个月的订单"
"把这个表格导出成Excel"

AI会自动分析页面结构并引导确认。

方式二:命令行

# 智能采集(自动分析)
node scraper.js --url https://example.com/data --auto

# 使用模板
node scraper.js --template hostex --credentials ./cred.json

# 手动指定字段
node scraper.js --url https://example.com/orders --fields 订单号,金额,日期

方式三:API调用

const { SmartScraper } = require('./universal-scraper');

// 智能采集(AI自动分析)
const result = await SmartScraper.scrape({
  url: 'https://example.com/orders',
  description: '采集订单号、客户名、金额、日期'
});
// → 返回 { data: [...], fields: [...], template: '...' }

// 指定模板采集
const result2 = await SmartScraper.scrape({
  url: 'https://hostex.com/reservations',
  template: 'hostex-orders',
  credentials: { username: '...', password: '...' }
});

多Agent协作流程

┌─────────────────────────────────────────────────────────────────┐
│                        用户请求入口                              │
│                   "帮我采集订单数据"                              │
└────────────────────────────┬────────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  研究员 Agent (Researcher)                                       │
│  ─────────────────────────────────────────────────────────────  │
│  1. URL分析与网站类型识别                                        │
│  2. DOM结构扫描(表单、表格、分页)                              │
│  3. 智能选择器候选生成                                           │
│  4. 模板匹配推荐                                                 │
│  输出: pageAnalysis { type, selectors, template }               │
└────────────────────────────┬────────────────────────────────────┘
                             │ 确认/修正
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  开发者 Agent (Developer)                                        │
│  ─────────────────────────────────────────────────────────────  │
│  1. 选择器适配与优化                                             │
│  2. 登录流程编排                                                 │
│  3. 分页翻页逻辑                                                 │
│  4. 反爬策略应用                                                 │
│  输出: scrapeConfig { login, scrape, pagination }              │
└────────────────────────────┬────────────────────────────────────┘
                             │ 执行采集
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  测试员 Agent (Tester)                                           │
│  ─────────────────────────────────────────────────────────────  │
│  1. 数据完整性校验                                               │
│  2. 字段准确性验证                                               │
│  3. 格式正确性检查                                               │
│  4. 边界条件测试                                                 │
│  输出: testReport { passed, failed, issues }                     │
└────────────────────────────┬────────────────────────────────────┘
                             │ 通过/修复
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  评审员 Agent (Reviewer)                                         │
│  ─────────────────────────────────────────────────────────────  │
│  1. 最终质量把关                                                 │
│  2. 确认导出格式                                                 │
│  3. 用户确认                                                     │
│  输出: approval { status, summary }                              │
└────────────────────────────┬────────────────────────────────────┘
                             │ 完成
                             ▼
                       数据导出完成

预置模板市场

电商订单模板 (e-commerce-orders)

template: e-commerce-orders
name: 电商订单采集
websites:
  - admin.shopify.com
  - ma.aliexpress.com
  - seller.taobao.com
fields:
  - orderId: 订单号
  - customer: 客户名称
  - product: 商品名称
  - quantity: 数量
  - amount: 金额
  - status: 订单状态
  - createdAt: 下单时间

民宿订单模板 (hostex-orders)

template: hostex-orders
name: 百居易民宿订单
websites:
  - www.myhostex.com
loginUrl: https://www.myhostex.com/app/login
loggedInSelector: .sidebar, .menu, [class*="nav"]
fields:
  - guestName: 房客姓名
  - roomName: 房间名称
  - checkIn: 入住日期
  - checkOut: 离店日期
  - amount: 订单金额
  - status: 状态
  - platform: 平台来源
pagination:
  container: .ant-pagination
  nextButton: .ant-pagination-next
  totalPattern: 共\s*(\d+)\s*条记录

财务报表模板 (finance-report)

template: finance-report
name: 财务报表导出
fields:
  - date: 日期
  - description: 摘要
  - category: 类别
  - income: 收入
  - expense: 支出
  - balance: 余额

社交媒体数据模板 (social-media)

template: social-media
name: 社交媒体数据
fields:
  - username: 用户名
  - posts: 帖子数
  - followers: 粉丝数
  - following: 关注数
  - engagement: 互动率

配置说明

智能采集配置 (autoScrapeConfig)

| 参数 | 必填 | 说明 | |------|------|------| | url | 是 | 目标页面URL | | description | 否 | 自然语言描述采集需求 | | template | 否 | 使用预置模板 | | credentials | 否 | { username, password } |

手动配置 (manualConfig)

当自动配置不满足需求时使用:

登录配置 (loginConfig)

| 参数 | 必填 | 说明 | |------|------|------| | loginUrl | 是 | 登录页面URL | | username | 是 | 用户名/邮箱/手机号 | | password | 是 | 密码 | | loginButtonSelector | 否 | 登录按钮选择器,默认自动检测 | | usernameSelector | 否 | 用户名输入框,默认自动检测 | | passwordSelector | 否 | 密码输入框,默认自动检测 | | loggedInSelector | 否 | 登录成功标识 |

采集配置 (scrapeConfig)

| 参数 | 必填 | 说明 | |------|------|------| | targetUrl | 是 | 目标页面URL | | tableSelector | 否 | 表格选择器,默认自动检测 | | rowSelector | 否 | 行选择器,默认"tr" | | columnMappings | 是 | 列映射 | | paginationSelector | 否 | 分页容器 | | nextButtonSelector | 否 | 下一页按钮 | | totalRecordsPattern | 否 | 总记录数正则 | | maxPages | 否 | 最大页数,默认999 |

列映射 (columnMappings)

columnMappings: [
  { key: 'orderId', header: '订单号', selector: 'td:nth-child(1)' },
  { key: 'amount', header: '金额', selector: 'td:nth-child(2)' },
  { key: 'date', header: '日期', selector: 'td:nth-child(3)' }
]

错误处理

| 错误码 | 场景 | 自动处理 | |--------|------|----------| | E001 | URL无效 | 提示检查URL格式 | | E002 | 登录失败 | 自动重试3次,提示检查凭据 | | E003 | 选择器失效 | 自动尝试备选选择器 | | E004 | 登录超时 | 自动重试,增加等待时间 | | E005 | 需验证码 | 提示用户手动处理 | | E006 | 页面加载超时 | 自动重试,最大3次 | | E007 | 选择器未找到 | 交互式让用户确认/指定 | | E008 | 导出失败 | 保留JSON,提示手动导出 | | E009 | Cookie过期 | 自动清理并重新登录 | | E010 | 反爬拦截 | 自动降低请求频率 | | E011 | 模板不匹配 | 切换到手动配置模式 |

交互式错误处理

当发生需用户介入的错误时:

⚠️ 选择器定位失败

AI尝试了以下选择器均未找到:
  1. tbody > tr:nth-child(1)
  2. .data-row
  3. table tr:first-child

请选择:
  [1] 让我手动指定选择器
  [2] 再试一次自动检测
  [3] 查看页面截图帮助定位

快速启动示例

电商订单采集

用户: "帮我采集shopify后台的订单数据"

AI (研究员): 分析 https://admin.shopify.com/order...
AI (开发者): 适配选择器,开始采集
AI (测试员): 验证数据完整性
AI (评审员): 确认结果

→ 采集完成,导出 data/orders_2026-05-25.xlsx

民宿订单导出

用户: "导出百居易这个月的所有订单"

AI: 检测到模板 hostex-orders
AI (研究员): 确认页面结构匹配
AI (开发者): 使用预置配置采集
AI (测试员): 验证100条订单数据
AI (评审员): 确认导出

→ 导出完成: data/hostex_orders_2026-05.xlsx

自定义采集

用户: "抓取这个页面 https://example.com/inventory 的产品名称和库存"

AI (研究员): 分析页面结构
AI (研究员): 检测到表格包含产品信息
AI (开发者): 生成字段映射

字段映射预览:
  - 产品名称 → td:nth-child(1)
  - 库存数量 → td:nth-child(5)

确认这些字段? [Y/n]

技术栈

  • Playwright ^1.59.1 - 浏览器自动化
  • xlsx - Excel导出
  • Cheerio - HTML解析

目录结构

universal-scraper/
├── SKILL.md              # 本文件(多Agent调度入口)
├── config/
│   └── templates.yaml    # 网站模板配置
└── references/
    ├── test_pool.md      # 测试用例池
    └── agent-prompts.md  # Agent提示词模板

Last updated: 2026-05-25 Version: 2.0.0