Etsy 竞品分析 Skill
功能概述
支持两种分析模式:
| 模式 | 输入 | 输出 | |------|------|------| | 实时爬取 | Etsy listing URL(s) | 单品报告 / 多竞品对比报告 | | CSV 分析 | 已抓取的 Etsy CSV 数据文件 | 批量竞品分析报告(表格驱动型) |
触发条件:
- 用户发来一个或多个
etsy.com/listing/链接 - 用户提供 Etsy CSV 数据文件路径
- 提及"分析竞品/批量分析/多个竞品/CSV分析"
模式一:实时爬取模式
环境配置(用户固定参数)
- Chrome 路径:
C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromex.exe - 用户数据目录:
C:\Users\Administrator\AppData\Local\Google\Chrome\User Data - CDP 调试端口:
9222 - 输出目录:
C:\Users\Administrator\Downloads\ - 单品脚本:
scripts/etsy_analyze.js - 批量脚本:
scripts/etsy_batch.js(2 个以上链接时使用) - 模板报告:
template_report.html(批量分析标准模板)
触发判断逻辑
用户发来的 Etsy 链接数量:
1 个 → 使用 etsy_analyze.js(单品报告)
2+ 个 → 使用 etsy_batch.js(单品报告 × N + 1 份对比总报告)
如何识别多个链接:用户可以用任何方式提供链接:
- 换行分隔
- 空格分隔
- 列表形式(1. 2. 3.)
- 多条消息(先提一个再加一个)
只要消息里有 2 个及以上 etsy.com/listing/ 链接,就走批量流程。
模式二:CSV 数据分析模式
当用户提供已抓取的 Etsy CSV 数据文件时,直接读取 CSV 并生成分析报告。
输入格式要求
CSV 文件应包含以下字段(标准 Etsy 抓取格式):
商品链接,商品ID,商品标题,商品标价,商品图片,定制选项1,定制选项2,商品描述,店铺名称,抓取时间
工作流程
Step 1:读取 CSV 文件
使用 Read 工具读取 CSV 文件路径,解析所有竞品数据。
Step 2:数据提取与统计
从每条记录中提取:
- 价格:从"商品标价"字段提取数字(支持 NowUSD/USD 格式)
- 标题字数:计算标题字符数
- 描述字数:计算描述字符数
- 店铺:店铺名称
- 变体:解析定制选项1和定制选项2,统计风格数和图案数
- SKU组合:计算选项组合总数
- 定制类型:从选项中识别定制方式(姓名、日期、照片等)
Step 3:生成 HTML 报告
使用 Write 工具生成报告,必须使用标准表格驱动型格式。
参考模板:C:\Users\Administrator\.workbuddy\skills\etsy-analyzer\template_report.html
Step 4:输出文件
保存到与 CSV 同目录:
<CSV文件所在目录>/Etsy竞品分析报告_<日期>.html
报告格式规范(标准版)
必须使用表格驱动型报告格式,参考 template_report.html:
1. 核心摘要卡片
<div class="summary-grid">
<div class="stat-card">
<div class="stat-num">竞品数</div>
<div class="stat-label">竞品样本数</div>
</div>
...
</div>
2. 核心数据对比表(必须包含)
| 列 | 说明 | |---|---| | # | 序号 | | 图片 | 商品缩略图(56x56px) | | 商品标题 | 可点击链接 | | 店铺 | 店铺名 | | 基础价 | 最低标价 | | 最高价 | 最高变体价 | | 标题字数 | 标题字符数 | | 风格数 | 定制选项1数量 | | 图案数 | 定制选项2数量 | | SKU组合 | 总变体组合数 | | 定制类型 | badge 标签 |
3. 定制选项详细对比表
每行展示:店铺名、风格/款式选项(opt-pill)、图案/内容选项、选项组合数、个性化类型
4. 定价策略分析表
| 价格区间 | 竞品数 | 代表款式 | 特点 | 策略建议 |
5. 关键词分析
- 词频统计:使用 kw-bar 条形图展示关键词出现频率
- 词云:tag-cloud + tag/tag-lg/tag-md/tag-sm 分层
- 关键词分层策略表:核心词/场景词/差异词/长尾词
6. 描述核心信息分析表
| 维度 | 高频内容 | 频率 | 建议 |
7. 竞品深度对比
选择 2-3 个典型竞品进行多维度对比
8. 市场机会与建议
- 差异化机会点:opportunity 样式卡片
- 注意事项:warning 样式卡片
- 推荐标题模板:insight-box 样式
- Tags 推荐清单:tag-cloud 样式
9. 附录:原始数据索引
包含商品ID、店铺名、价格、SKU数、可点击链接的表格
CSS 样式规范
/* 固定颜色主题 */
--primary: #C2410C (橙色)
--bg: #f4f4f4
--card-bg: #fff
--success: #22c55e (opportunity)
--warning: #f59e0b (warning)
/* 标签样式 */
.badge-bs { background: #C2410C } /* Bestseller */
.badge-new { background: #6366f1 } /* 新品/定制类型 */
.opt-pill { background: #f1f5f9 } /* 选项胶囊 */
.tag { background: #fde8de } /* 标签 */
/* 盒样式 */
.insight-box { background: #fff8f5; border-left: 3px solid #C2410C }
.opportunity { background: #f0fdf4; border-left: 3px solid #22c55e }
.warning { background: #fffbeb; border-left: 3px solid #f59e0b }
标准工作流程(实时爬取 4 步)
Step 1:提取 Listing ID
从 URL 中提取数字 ID:
https://www.etsy.com/listing/1234567890/... → listingId = 1234567890
Step 2:启动 Chrome(有界面 + CDP 端口)
必须使用有界面模式(非 headless),利用本地 Cookie 绕过 DataDome 反爬机制:
$chromePath = "C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromex.exe"
$userDataDir = "C:\Users\Administrator\AppData\Local\Google\Chrome\User Data"
# 先检查端口是否已被占用(复用已有实例)
$portInUse = netstat -an | Select-String ":9222 "
if (-not $portInUse) {
Start-Process $chromePath "--remote-debugging-port=9222 --user-data-dir=`"$userDataDir`" --no-first-run <URL>"
Start-Sleep -Seconds 18 # 等待页面完全渲染(含可能的验证码)
} else {
# 端口已在使用,导航到新 URL
# 通过 CDP /json/new?<url> 打开新标签页
Start-Sleep -Seconds 5
}
⚠️ 等待时间至少 18 秒,确保 JS 渲染和反爬验证完成。
Step 3:运行分析脚本
单品(1 个链接):
$scriptPath = "<SKILL_DIR>\scripts\etsy_analyze.js"
node $scriptPath "<etsy_url>"
批量(2+ 个链接):
$scriptPath = "<SKILL_DIR>\scripts\etsy_batch.js"
node $scriptPath "<url1>" "<url2>" "<url3>"
脚本自动完成:
- 连接
http://localhost:9222/json获取页面列表 - WebSocket 连接 Chrome DevTools Protocol
- 执行
Runtime.evaluate获取document.documentElement.outerHTML - 解析 JSON-LD 结构化数据(
<script type="application/ld+json">) - 生成 HTML 竞品报告(批量还会生成对比总报告)
输出文件:
- 单品报告:
C:\Users\Administrator\Downloads\etsy_report_<listingId>.html - 批量对比:
C:\Users\Administrator\Downloads\etsy_compare_<timestamp>.html
Step 4:展示报告
报告生成后,使用 preview_url 工具以 file:/// 协议展示报告:
file:///C:/Users/Administrator/Downloads/etsy_report_<listingId>.html
报告包含内容
单品报告
| 模块 | 数据字段 | |------|---------| | 核心指标 | 价格区间、评分、评价数、销量、收藏数 | | 基本信息 | 商品名、店铺、发货地、上架时间、图片数量 | | 商品变体 | 所有可选变体属性 | | SEO 关键词 | Meta keywords 标签 | | 图片预览 | 前 6 张商品主图 | | 客户评论 | 近期真实评论(最多 5 条) | | 竞品机会 | 价格/评价/运费/变体/图片维度的差异化建议 |
多竞品对比报告(批量专属)
| 模块 | 内容 | |------|------| | 综合最强竞品 | 自动评分排名,突出 TOP 1 | | 可视化图表 | 销量/评价/价格条形图 + 综合雷达图(Chart.js) | | 详细对比表 | 所有竞品关键指标并排对比 | | SEO 关键词对比 | 各竞品关键词横向展示 | | 机会分析矩阵 | 每个竞品的差异化机会卡片 |
数据提取优先级
- JSON-LD 结构化数据(
@type: Product):最可靠,优先使用 - Meta 标签(
keywords、description):SEO 数据备用 - 页面文本正则匹配:销量、收藏数等非结构化数据
常见问题处理
CDP 连接失败:
- 确认 Chrome 已启动且端口 9222 可访问:
Invoke-RestMethod http://localhost:9222/json - 如端口被占用但不是 Chrome,先关闭占用进程
页面被 DataDome 拦截(只有 1-2KB HTML):
- 必须使用有界面模式(非
--headless) - 确认使用了正确的
--user-data-dir(含登录 Cookie) - 增加等待时间到 25 秒
HTML 抓取成功但数据为空:
- 检查是否为香港/其他区域版本 URL(
/hk-en/) - JSON-LD 数据结构可能因地区而异
CSV 字段缺失:
- 部分字段可能为空,使用默认值或"-"代替
- 图片链接可能失效,添加
onerror="this.style.display='none'"
注意事项
- 本工具仅用于公开可访问的商品页面分析,不绕过付费墙或登录限制
- 每次分析间隔建议 30 秒以上,避免触发 IP 频率限制
- Chrome 进程在分析完成后不会自动关闭(保留供下次复用)
- CSV 分析模式下,报告保存到 CSV 同目录下
Scan to join WeChat group