Skip to content
Back to skills

Amazon Rank Scraper

ASecurity

输入关键词,获取亚马逊自然位与广告位排名数据

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 10, 2026
datapythonbash

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add huawolf/VaneWorker --skill amazon-rank-scraper --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Amazon Rank Scraper?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Amazon Rank Scraper
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/huawolf-amazon-rank-scraper/badge)](https://www.skillsdirectory.com/skills/huawolf-amazon-rank-scraper)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: amazon-rank-scraper
description: 输入关键词,获取亚马逊自然位与广告位排名数据
title: 亚马逊排名查询
example: 查询“wireless earbuds”在亚马逊美国站(邮编10001)前3页的排名情况。
version: 1.0.1
---
# 亚马逊商品排名获取 Skill

## 角色定位

你负责调用 `amazon-rank-scraper` skill 的高层业务接口,帮助用户完成亚马逊商品排名数据抓取任务。
当用户目标明确属于亚马逊关键词排名查询时,必须优先使用本 skill 提供的高层接口,
而不是自行组合底层步骤。

---

## 调用方式

`run.py` 位于本 SKILL.md 的同级目录。执行前先确认本文件的实际读取路径,取其所在目录作为 `<skill_path>`。

本技能已升级为 BrowserWorker 插件操控架构:`run.py` 通过项目内置 `BrowserWorker` daemon 的 `/execute` 接口加载 `scripts/actions` 中的 action。实现不依赖用户机器预装 Chrome、ChromeDriver、Playwright、Selenium、requests、BeautifulSoup 或 pandas,适合 macOS 和 Windows 安装环境。

action 打开页面后使用 BrowserWorker 框架级 `detect_page_state(domain_hint=...)` 做通用页面状态检测,遇到登录、验证码、地区确认、风控拦截等状态时调用 `request_help(validate_after=True)`,用户继续后由框架二次校验。不要在 skill 中恢复站点专用的验证码绕过或重复刷新逻辑。

端口发现顺序:`BrowserWorker_PORT` / `MANAI_BROWSER_CONTROL_PORT` → 工作区 `storage/browser_daemon.lock` → 兼容旧锁文件 `~/.BrowserWorker/BrowserWorker.lock` → 默认 `12321`。daemon 未响应时会尝试从项目内 `BrowserWorker` 目录自动启动。

**推荐:`--key value` 扁平参数(无引号转义问题)**

```bash
python <skill_path>/run.py <method> --param1 value1 --param2 value2
```

**兼容:单个 JSON 字符串**

```bash
python <skill_path>/run.py <method> '{"param1":"value1","param2":"value2"}'
```

- 成功:stdout 输出 JSON 结果,退出码 0
- 失败:stderr 输出错误信息,退出码非 0

---

## 适用场景

适合以下任务:

- 查询某关键词在亚马逊搜索结果页的商品自然排名和广告排名
- 批量查询多个关键词的排名数据
- 获取指定 ASIN 在某关键词下的排名位置
- 抓取亚马逊搜索结果页商品列表(标题、价格、ASIN)
- 监控竞品在特定关键词下的排名变化

---

## 方法速查表

| 用户需求 | method | 必填参数示例 |
|----------|--------|-------------|
| 查单个关键词排名 | `scrape_keyword` | `--keyword "wireless earbuds"` |
| 批量查多个关键词排名 | `scrape_keywords_batch` | `--keywords "kw1" --keywords "kw2"` |
| 解析商品HTML片段 | `parse_product_html` | `--html "<div...>" --index 0 --keyword "kw"` |

---

## 核心接口

### 排名抓取

| method | 关键参数 | 说明 |
|--------|----------|------|
| `scrape_keyword` | `keyword`(必填), `amazonUrl?`, `pageCount?`, `zipCode?` | 抓取单个关键词的排名数据 |
| `scrape_keywords_batch` | `keywords`(必填数组), `amazonUrl?`, `pageCount?`, `zipCode?` | 批量抓取多个关键词 |
| `parse_product_html` | `html`(必填), `index`(必填), `natureRank?`, `keyword?`, `page?`, `currentDate?` | 解析单个商品HTML片段(无需浏览器) |

---

## 参数约定

### `amazonUrl`

| 值 | 含义 |
|----|------|
| `"https://www.amazon.com/"` | 美国站(默认) |
| `"https://www.amazon.co.jp/"` | 日本站 |
| `"https://www.amazon.co.uk/"` | 英国站 |
| `"https://www.amazon.de/"` | 德国站 |

### `pageCount`

数字字符串,表示每个关键词抓取的搜索结果页数。默认 `3`,建议不超过 `10`。

### `zipCode`

美国邮政编码,用于设置配送地址(影响价格和库存显示)。默认 `90001`(洛杉矶)。

### 浏览器会话

BrowserWorker daemon 统一管理插件浏览器会话和域名级并发锁。旧版 `incognito` 参数不再作为控制项使用;如果外部调用仍传入该参数,技能会忽略它并复用 BrowserWorker 管理的会话。

---

## 参数校验规则(调用守门)

**⚠️ 强制约束:LLM 在执行任何 method 之前,必须先按下表校验参数,全部通过才允许执行脚本命令。任何一项不通过,禁止执行,直接向用户反馈缺失或不合法的参数。**

### `scrape_keyword` 参数校验

| 参数 | 必填 | 类型 | 校验规则 | 不满足时的反馈话术 |
|------|------|------|----------|-------------------|
| `keyword` | ✅ | `string` | 非空字符串 | "缺少必填参数 `keyword`,请提供要搜索的关键词。" |
| `amazonUrl` | ❌ | `string` | 若提供,必须以 `https://www.amazon.` 开头 | "参数 `amazonUrl` 格式不合法,请提供合法的亚马逊站点URL,如 `https://www.amazon.com/`。" |
| `pageCount` | ❌ | `number` | 若提供,必须为 1-20 之间的整数 | "参数 `pageCount` 须为 1-20 之间的整数,表示抓取页数。" |
| `zipCode` | ❌ | `string` | 若提供,须为 5 位数字 | "参数 `zipCode` 须为 5 位数字邮编,如 `90001`。" |

### `scrape_keywords_batch` 参数校验

| 参数 | 必填 | 类型 | 校验规则 | 不满足时的反馈话术 |
|------|------|------|----------|-------------------|
| `keywords` | ✅ | `string[]` | 至少包含 1 项;每项非空字符串 | "缺少必填参数 `keywords`,请至少提供一个关键词(可重复使用 `--keywords`)。" |
| `amazonUrl` | ❌ | `string` | 若提供,必须以 `https://www.amazon.` 开头 | "参数 `amazonUrl` 格式不合法,请提供合法的亚马逊站点URL。" |
| `pageCount` | ❌ | `number` | 若提供,须为 1-20 之间的整数 | "参数 `pageCount` 须为 1-20 之间的整数。" |
| `zipCode` | ❌ | `string` | 若提供,须为 5 位数字 | "参数 `zipCode` 须为 5 位数字邮编,如 `90001`。" |

### `parse_product_html` 参数校验

| 参数 | 必填 | 类型 | 校验规则 | 不满足时的反馈话术 |
|------|------|------|----------|-------------------|
| `html` | ✅ | `string` | 非空字符串,应为 HTML 片段 | "缺少必填参数 `html`,请提供商品 HTML 片段。" |
| `index` | ✅ | `number` | 非负整数 | "缺少必填参数 `index`,请提供商品在当前页中的 0-based 位置索引。" |

### 校验流程

```
用户发出调用意图
  → LLM 识别目标 method
  → LLM 逐项检查「参数校验规则」表
  → 全部通过?
      ├─ 是 → 组装命令并执行
      └─ 否 → 列出所有不满足的参数及反馈话术,返回给用户,不执行命令
```

---

## 使用示例

### 抓取单个关键词排名(美国站,3页)

```bash
python <skill_path>/run.py scrape_keyword --keyword "wireless earbuds" --pageCount 3 --zipCode 10001
```

### 抓取单个关键词排名(日本站)

```bash
python <skill_path>/run.py scrape_keyword --keyword "ワイヤレスイヤホン" --amazonUrl "https://www.amazon.co.jp/" --pageCount 2
```

### 批量抓取多个关键词

```bash
python <skill_path>/run.py scrape_keywords_batch \
  --keywords "bluetooth speaker" \
  --keywords "wireless mouse" \
  --keywords "usb hub" \
  --pageCount 3 \
  --zipCode 90001
```

### JSON 格式调用

```bash
python <skill_path>/run.py scrape_keywords_batch '{"keywords":["bluetooth speaker","wireless mouse"],"pageCount":2,"zipCode":"90001"}'
```

### 解析 HTML 片段(离线解析,无需浏览器)

```bash
python <skill_path>/run.py parse_product_html --html "<div data-asin='B0XXXXXX'...>" --index 0 --keyword "wireless earbuds" --page 1
```

---

## 返回数据结构

### `scrape_keyword` / `scrape_keywords_batch` 返回字段

```json
{
  "keyword": "wireless earbuds",
  "pagesFetched": 3,
  "totalProducts": 48,
  "products": [
    {
      "Date": "2026/04/14",
      "Asin": "B0XXXXXXXXX",
      "Title": "Product Title",
      "Price": "$29.99",
      "Keyword": "wireless earbuds",
      "PageRank": "1—3",
      "Page": 1,
      "NatureRank": 2,
      "AdIndex": "",
      "Sponsored": "False",
      "SponsoreId": "",
      "Feautrued_brand": "False",
      "Recommended_by_Amazon": "False",
      "AdId": "",
      "CampaignId": ""
    }
  ]
}
```

| 字段 | 说明 |
|------|------|
| `Asin` | 商品 ASIN 编码 |
| `PageRank` | 页数—位置,如 `1—3` 表示第1页第3位 |
| `NatureRank` | 自然排名(广告商品为空) |
| `AdIndex` | 广告排名位置 |
| `Sponsored` | 是否广告商品(`"True"` / `"False"`) |
| `Feautrued_brand` | 是否品牌精选(`"True"` / `"False"`) |
| `Recommended_by_Amazon` | 是否亚马逊推荐(`"True"` / `"False"`) |

---

## 执行策略

当用户提出亚马逊排名相关任务时,按以下顺序处理:

1. **参数收集**:从用户消息中提取 method 和参数(关键词、站点、页数等)
2. **参数校验**:按「参数校验规则」逐项检查,不满足则反馈用户并停止
3. **调用执行**:组装命令并执行,等待结果(抓取耗时较长,默认超时 300s)
4. **结果呈现**:将排名数据整理后展示给用户,重点突出自然位和广告位信息
5. **失败处理**:若接口执行失败,返回真实错误并说明下一步排查方向

---

## 常见失败场景

### BrowserWorker daemon 服务未启动

表现:
- 错误信息包含 `无法连接到浏览器守护进程` 或 `Connection refused`

处理:
- 确认 ManAI 主程序或 BrowserWorker daemon 已启动
- 检查端口是否正确(默认 `12321`),可通过 `storage/browser_daemon.lock`、`BrowserWorker_PORT` 或 `MANAI_BROWSER_CONTROL_PORT` 覆盖

### 插件浏览器未连接

表现:
- 错误信息包含插件浏览器连接失败、页面无法创建或超时

处理:
- 确认 BrowserWorker 插件环境正常
- 由 ManAI 主程序重新启动 BrowserWorker 后重试,不要求用户手动安装浏览器驱动

### 亚马逊验证码阻断

表现:
- 抓取结果 `totalProducts` 为 0 或极少
- products 列表中 Asin 均为空

处理:
- 根据 `request_help` 提示,在插件浏览器中完成验证码或登录后继续
- 不要自动反复刷新或重复执行同一关键词,避免触发更强风控
- 考虑使用 `--zipCode` 切换配送地址或降低抓取频率

### 关键词无搜索结果

表现:
- `totalProducts` 为 0,无错误

处理:
- 检查关键词拼写或更换关键词
- 检查 `amazonUrl` 是否与关键词语言匹配(如日文关键词用日本站)

Files in this skill

  • SKILL.md10.3 KB
  • info.json547 B
  • run.py13.6 KB
  • scripts/actions/parse_product_html.py2.5 KB
  • scripts/actions/scrape_keyword.py8.7 KB
  • scripts/actions/scrape_keywords_batch.py2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…