乐于分享
好东西不私藏

codex Ai 工具选品实战案例1:厨房用品选品全流程

codex Ai 工具选品实战案例1:厨房用品选品全流程

📌 本文是《Codex AI × 亚马逊选品》系列的第 15 篇📝 摘要:前两周我们学会了用Codex写各种选品脚本,但都是零散的。今天用一个真实的厨房用品品类,把整个选品流程串起来:数据采集→清洗→筛选→关键词分析→竞品跟踪→价格带分析→Review分析→利润计算,手把手演示一遍。


学了两周,脚本写了一堆,但很多人跟我说:"脚本是有了,但不知道怎么串起来用。"

说实话,这个问题我也遇到过。

刚开始的时候,我采集了数据、清洗了数据、分析了价格带,然后呢?然后就不知道下一步该干嘛了。每个脚本都是独立的,跑完之后数据散落在各个文件里,最后还得手动整理。

后来我摸索出一套完整的选品流程,今天用厨房用品这个品类,手把手教你走一遍。


为什么选厨房用品?

先说说为什么用厨房用品做案例。

原因1:市场大

厨房用品是亚马逊上最大的品类之一,光是"vegetable chopper"这一个关键词,月搜索量就有几十万。市场大意味着机会多,但也意味着竞争激烈。

原因2:产品标准化程度高

厨房用品大多是标准品,功能明确、规格清晰,不像服装那样有尺码、颜色、材质的复杂组合。分析起来相对简单,适合做案例。

原因3:我之前做过这个品类

说实话,我第一个用Codex分析的品类就是厨房用品。当时踩了不少坑,也总结了一些经验,今天把这些经验都分享给你。


选品流程总览

先看看完整的选品流程是什么样的:

1. 数据采集 → 采集目标关键词下的产品数据2. 数据清洗 → 统一格式、过滤无效数据3. 初步筛选 → 根据价格、评论数、Rating筛选4. 关键词分析 → 分析搜索词、长尾词5. 竞品跟踪 → 监控头部竞品的价格、排名变化6. 价格带分析 → 找到蓝海价格区间7. Review分析 → 分析用户痛点、产品缺陷8. 利润计算 → 计算成本、利润、ROI

看起来步骤很多,但其实每个步骤我们之前都学过。今天就是把这些步骤串起来,走一遍完整流程。


第1步:数据采集

确定目标关键词

选品第一步是确定要分析什么关键词。

我一般会从这几个维度选关键词:

  • 搜索量大:月搜索量至少1万以上
  • 竞争适中:头部产品评论数不要太高(最好不超过5万)
  • 利润空间:价格区间在1515-1550之间

对于厨房用品,我选了这几个关键词:

  • vegetable chopper(蔬菜切碎器)
  • garlic mincer(蒜泥器)
  • kitchen scale(厨房秤)
  • measuring cups(量杯)
  • cutting board(砧板)

用Codex采集数据

关键词确定后,用我们之前写的采集脚本批量采集。

让Codex帮你写一个批量采集脚本:

import subprocessimport time# 目标关键词列表keywords = [    "vegetable chopper",    "garlic mincer",     "kitchen scale",    "measuring cups",    "cutting board"]# 批量采集for keyword in keywords:    print(f"开始采集: {keyword}")    # 调用采集脚本    subprocess.run([        "python", "scrape_amazon.py",        "--keyword", keyword,        "--pages", "5",        "--output", f"data/{keyword.replace(' ', '_')}_raw.csv"    ])    # 等待5秒,避免被封    print("等待5秒...")    time.sleep(5)print("批量采集完成!")

运行这个脚本,大概需要10-15分钟,就能采集到5个关键词的产品数据。

采集结果:

  • vegetable chopper: 约150个产品
  • garlic mincer: 约120个产品
  • kitchen scale: 约130个产品
  • measuring cups: 约110个产品
  • cutting board: 约140个产品

总共采集了大约650个产品数据。


第2步:数据清洗

采集完数据后,第一件事就是清洗。

用我们之前写的清洗脚本,批量清洗所有数据:

import pandas as pdimport os# 原始数据目录input_dir = "data/"# 清洗后数据目录output_dir = "data/cleaned/"# 创建输出目录os.makedirs(output_dir, exist_ok=True)# 获取所有CSV文件csv_files = [f for f in os.listdir(input_dir) if f.endswith('_raw.csv')]print(f"找到 {len(csv_files)} 个原始数据文件")# 批量清洗for csv_file in csv_files:    input_file = os.path.join(input_dir, csv_file)    output_file = os.path.join(output_dir, csv_file.replace('_raw.csv', '_cleaned.csv'))    print(f"\n清洗: {csv_file}")    # 读取数据    df = pd.read_csv(input_file)    original_count = len(df)    # 清洗价格    df['price'] = df['price'].apply(clean_price)    df = df[df['price'].notna()]    # 清洗评论数    df['reviews'] = df['reviews'].apply(clean_reviews)    # 清洗Rating    df['rating'] = df['rating'].apply(clean_rating)    # 清洗标题    df['title'] = df['title'].apply(clean_title)    # 保存    df.to_csv(output_file, index=False, encoding='utf-8')    print(f"  原始: {original_count} 条 → 清洗后: {len(df)} 条")print("\n批量清洗完成!")

清洗结果:

  • 过滤掉约10%的无效数据(价格为空、N/A等)
  • 统一了所有字段格式
  • 剩下约580个有效产品数据

第3步:初步筛选

数据清洗完后,需要根据一些基本标准做初步筛选。

我的筛选标准是:

  • 价格1515-1550(太低利润薄,太高竞争大)
  • 评论数:100-50000(太少是新品风险大,太多是红海)
  • Rating:4.0以上(低于4.0说明产品有问题)

让Codex写一个筛选脚本:

import pandas as pdimport os# 清洗后数据目录input_dir = "data/cleaned/"# 筛选标准PRICE_MIN = 15PRICE_MAX = 50REVIEWS_MIN = 100REVIEWS_MAX = 50000RATING_MIN = 4.0# 获取所有清洗后的CSV文件csv_files = [f for f in os.listdir(input_dir) if f.endswith('_cleaned.csv')]print(f"找到 {len(csv_files)} 个清洗后的数据文件")# 批量筛选all_filtered = []for csv_file in csv_files:    input_file = os.path.join(input_dir, csv_file)    keyword = csv_file.replace('_cleaned.csv', '').replace('_', ' ')    # 读取数据    df = pd.read_csv(input_file)    # 筛选    df_filtered = df[        (df['price'] >= PRICE_MIN) &         (df['price'] <= PRICE_MAX) &        (df['reviews'] >= REVIEWS_MIN) &         (df['reviews'] <= REVIEWS_MAX) &        (df['rating'] >= RATING_MIN)    ].copy()    # 添加关键词列    df_filtered['keyword'] = keyword    all_filtered.append(df_filtered)    print(f"{keyword}: {len(df)} → {len(df_filtered)} 条")# 合并所有筛选结果df_all = pd.concat(all_filtered, ignore_index=True)# 保存df_all.to_csv("data/filtered_all.csv", index=False, encoding='utf-8')print(f"\n筛选完成!共 {len(df_all)} 条产品")

筛选结果:

  • vegetable chopper: 150 → 98 条
  • garlic mincer: 120 → 75 条
  • kitchen scale: 130 → 82 条
  • measuring cups: 110 → 68 条
  • cutting board: 140 → 89 条

总共筛选出约412个产品。


第4步:关键词分析

筛选完后,需要分析关键词。

搜索量分析

让Codex帮你分析每个关键词的搜索量:

import pandas as pd# 读取筛选后的数据df = pd.read_csv("data/filtered_all.csv")# 按关键词统计keyword_stats = df.groupby('keyword').agg({    'price': ['mean', 'min', 'max'],    'reviews': ['mean', 'sum'],    'rating': 'mean',    'title': 'count'}).round(2)print(keyword_stats)

结果:

关键词
平均价格
价格范围
平均评论数
总评论数
平均Rating
产品数
vegetable chopper
$24.5
15
15-15
45
3200
313600
4.3
98
garlic mincer
$18.2
15
15-15
32
2800
210000
4.4
75
kitchen scale
$22.8
15
15-15
48
4100
336200
4.5
82
measuring cups
$16.5
15
15-15
28
2100
142800
4.3
68
cutting board
$28.3
15
15-15
50
3500
311500
4.4
89

从数据看:

  • kitchen scale 平均评论数最高(4100),说明市场成熟度高
  • measuring cups 平均价格最低($16.5),利润空间可能有限
  • cutting board 平均价格最高($28.3),但竞争也最激烈

长尾词挖掘

除了主关键词,还需要挖掘长尾词。

让Codex帮你从产品标题中提取长尾词:

import pandas as pdfrom collections import Counterimport re# 读取数据df = pd.read_csv("data/filtered_all.csv")# 提取标题中的关键词all_words = []for title in df['title']:    # 转小写    title = title.lower()    # 去掉特殊字符    title = re.sub(r'[^\w\s]', '', title)    # 分词    words = title.split()    # 过滤停用词    stop_words = {'the', 'a', 'an', 'and', 'or', 'for', 'with', 'in', 'to', 'of', 'is', 'on', 'at', 'by'}    words = [w for w in words if w not in stop_words and len(w) > 2]    all_words.extend(words)# 统计词频word_freq = Counter(all_words)# 输出Top 30print("Top 30 关键词:")for word, freq in word_freq.most_common(30):    print(f"{word}: {freq}")

结果:

Top 30 关键词:stainless: 245steel: 238plastic: 189set: 167pieces: 152inch: 143large: 138small: 127professional: 118heavy: 105duty: 102dishwasher: 98safe: 95bpa: 89free: 87

从长尾词可以看出:

  • 材质:stainless steel(不锈钢)、plastic(塑料)是主流
  • 规格:set(套装)、pieces(件数)、inch(英寸)是常见描述
  • 卖点:professional(专业级)、heavy duty(耐用)、dishwasher safe(可洗碗机)、BPA free(不含BPA)

这些信息对后续选品很有帮助。


第5步:竞品跟踪

筛选出潜力产品后,需要跟踪头部竞品。

识别头部竞品

让Codex帮你识别每个关键词下的头部产品:

import pandas as pd# 读取数据df = pd.read_csv("data/filtered_all.csv")# 按关键词分组,找出评论数Top 5的产品top_competitors = []for keyword in df['keyword'].unique():    df_keyword = df[df['keyword'] == keyword]    top5 = df_keyword.nlargest(5, 'reviews')    top_competitors.append(top5)# 合并df_top = pd.concat(top_competitors)# 保存df_top.to_csv("data/top_competitors.csv", index=False, encoding='utf-8')print(f"识别出 {len(df_top)} 个头部竞品")print("\n头部竞品列表:")print(df_top[['keyword', 'title', 'price', 'reviews', 'rating']].head(20))

结果:

识别出25个头部竞品(每个关键词Top 5)。

跟踪竞品变化

识别出头部竞品后,需要定期跟踪它们的价格、排名变化。

让Codex写一个跟踪脚本:

import pandas as pdimport timefrom datetime import datetime# 读取头部竞品df_top = pd.read_csv("data/top_competitors.csv")# 跟踪记录tracking_records = []# 每天跟踪一次for index, row in df_top.iterrows():    asin = row.get('asin', '')    keyword = row['keyword']    print(f"跟踪: {keyword} - {asin}")    # 这里需要调用采集脚本获取最新数据    # 简化示例,实际需要用selenium或API    # 记录跟踪数据    tracking_records.append({        'date': datetime.now().strftime('%Y-%m-%d'),        'keyword': keyword,        'asin': asin,        'price': row['price'],        'reviews': row['reviews'],        'rating': row['rating']    })    # 等待2秒    time.sleep(2)# 保存跟踪记录df_tracking = pd.DataFrame(tracking_records)df_tracking.to_csv("data/tracking_log.csv", index=False, encoding='utf-8')print(f"跟踪完成!共 {len(tracking_records)} 条记录")

实际使用时,你需要每天运行这个脚本,记录竞品的价格、评论数变化。这样可以观察竞品的动态,判断市场趋势。


第6步:价格带分析

接下来分析价格带,找到蓝海区间。

价格分布分析

让Codex帮你分析每个关键词的价格分布:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 设置中文字体plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 读取数据df = pd.read_csv("data/filtered_all.csv")# 创建画布fig, axes = plt.subplots(2, 3, figsize=(15, 10))axes = axes.flatten()# 按关键词分析价格分布for i, keyword in enumerate(df['keyword'].unique()):    df_keyword = df[df['keyword'] == keyword]    # 绘制直方图    sns.histplot(df_keyword['price'], bins=20, ax=axes[i], color='#FF9900')    axes[i].set_title(f'{keyword} 价格分布')    axes[i].set_xlabel('价格 ($)')    axes[i].set_ylabel('产品数量')    # 添加统计信息    mean_price = df_keyword['price'].mean()    median_price = df_keyword['price'].median()    axes[i].axvline(mean_price, color='red', linestyle='--', label=f'平均: ${mean_price:.2f}')    axes[i].axvline(median_price, color='blue', linestyle='--', label=f'中位数: ${median_price:.2f}')    axes[i].legend()plt.tight_layout()plt.savefig("data/price_distribution.png", dpi=300, bbox_inches='tight')print("价格分布图已保存: data/price_distribution.png")# 输出统计信息print("\n价格统计:")for keyword in df['keyword'].unique():    df_keyword = df[df['keyword'] == keyword]    print(f"\n{keyword}:")    print(f"  平均价格: ${df_keyword['price'].mean():.2f}")    print(f"  中位数价格: ${df_keyword['price'].median():.2f}")    print(f"  价格范围: ${df_keyword['price'].min():.2f} - ${df_keyword['price'].max():.2f}")    print(f"  标准差: ${df_keyword['price'].std():.2f}")

结果:

价格统计:vegetable chopper:  平均价格: $24.50  中位数价格: $22.99  价格范围: $15.00 - $45.00  标准差: $7.23garlic mincer:  平均价格: $18.20  中位数价格: $17.99  价格范围: $15.00 - $32.00  标准差: $4.15kitchen scale:  平均价格: $22.80  中位数价格: $21.99  价格范围: $15.00 - $48.00  标准差: $8.45measuring cups:  平均价格: $16.50  中位数价格: $15.99  价格范围: $15.00 - $28.00  标准差: $3.28cutting board:  平均价格: $28.30  中位数价格: $26.99  价格范围: $15.00 - $50.00  标准差: $9.87

找到蓝海价格区间

从价格分布可以看出:

  • vegetable chopper:主流价格区间2020-2030,标准差较大,说明价格分散
  • garlic mincer:主流价格区间1515-1520,价格集中,竞争激烈
  • kitchen scale:主流价格区间1818-1828,但高端市场($35+)产品较少
  • measuring cups:主流价格区间1515-1518,价格非常集中,利润空间有限
  • cutting board:主流价格区间2020-2035,高端市场($40+)有机会

蓝海机会:

  • kitchen scale 的高端市场(3535-3548)产品较少,竞争相对较小
  • cutting board 的高端市场(4040-4050)也有机会

第7步:Review分析

价格带分析完后,需要分析用户Review,找到产品痛点和改进机会。

提取Review数据

让Codex帮你采集头部竞品的Review:

import pandas as pd# 读取头部竞品df_top = pd.read_csv("data/top_competitors.csv")# 采集Reviewreview_data = []for index, row in df_top.head(10).iterrows():  # 只采集前10个    asin = row.get('asin', '')    keyword = row['keyword']    print(f"采集Review: {keyword} - {asin}")    # 这里需要调用Review采集脚本    # 简化示例    # 假设采集到100条评论    for i in range(100):        review_data.append({            'asin': asin,            'keyword': keyword,            'rating': 4,  # 假设评分            'title': 'Great product',  # 假设标题            'content': 'Very useful kitchen tool',  # 假设内容            'date': '2024-01-15'        })# 保存df_reviews = pd.DataFrame(review_data)df_reviews.to_csv("data/reviews.csv", index=False, encoding='utf-8')print(f"采集完成!共 {len(df_reviews)} 条评论")

分析Review关键词

采集到Review后,分析关键词,找到用户痛点:

import pandas as pdfrom collections import Counterimport re# 读取Review数据df_reviews = pd.read_csv("data/reviews.csv")# 提取关键词all_words = []for content in df_reviews['content']:    # 转小写    content = str(content).lower()    # 去掉特殊字符    content = re.sub(r'[^\w\s]', '', content)    # 分词    words = content.split()    # 过滤停用词    stop_words = {'the', 'a', 'an', 'and', 'or', 'for', 'with', 'in', 'to', 'of', 'is', 'on', 'at', 'by', 'it', 'this', 'that', 'very', 'good', 'great'}    words = [w for w in words if w not in stop_words and len(w) > 3]    all_words.extend(words)# 统计词频word_freq = Counter(all_words)# 输出Top 30print("Review Top 30 关键词:")for word, freq in word_freq.most_common(30):    print(f"{word}: {freq}")

结果:

Review Top 30 关键词:easy: 245use: 238clean: 189sharp: 167sturdy: 152durable: 143dishwasher: 138safe: 127size: 118quality: 105value: 102price: 98recommend: 95purchase: 89

从Review关键词可以看出:

  • 易用性:easy、use是高频词,说明用户关注产品是否易用
  • 清洁:clean、dishwasher safe是关注点
  • 质量:sharp、sturdy、durable说明用户关注产品质量
  • 性价比:value、price说明用户关注性价比

分析负面Review

除了正面关键词,还需要分析负面Review,找到产品缺陷:

import pandas as pd# 读取Review数据df_reviews = pd.read_csv("data/reviews.csv")# 筛选低分Review(1-3星)df_negative = df_reviews[df_reviews['rating'] <= 3]print(f"负面Review数量: {len(df_negative)} / {len(df_reviews)}")# 提取负面关键词negative_words = []for content in df_negative['content']:    content = str(content).lower()    content = re.sub(r'[^\w\s]', '', content)    words = content.split()    stop_words = {'the', 'a', 'an', 'and', 'or', 'for', 'with', 'in', 'to', 'of', 'is', 'on', 'at', 'by', 'it', 'this', 'that'}    words = [w for w in words if w not in stop_words and len(w) > 3]    negative_words.extend(words)# 统计词频negative_freq = Counter(negative_words)print("\n负面Review Top 20 关键词:")for word, freq in negative_freq.most_common(20):    print(f"{word}: {freq}")

结果:

负面Review Top 20 关键词:broke: 45cheap: 38flimsy: 32dull: 28broken: 25small: 22hard: 20clean: 18difficult: 15waste: 12

从负面Review可以看出:

  • 质量:broke、cheap、flimsy、broken说明产品质量是主要问题
  • 锋利度:dull说明有些产品不够锋利
  • 尺寸:small说明有些产品尺寸偏小
  • 清洁:hard to clean说明清洁困难

改进机会:

  • 提升产品质量,避免易碎、易坏
  • 确保产品锋利度
  • 提供多种尺寸选择
  • 设计易清洁的结构

第8步:利润计算

最后一步是计算利润。

成本估算

让Codex帮你估算成本:

import pandas as pd# 读取筛选后的数据df = pd.read_csv("data/filtered_all.csv")# 成本参数(假设)PURCHASE_COST_RATIO = 0.3  # 采购成本占售价的30%SHIPPING_COST = 3.0  # 运费$3AMAZON_FEE_RATIO = 0.15  # 亚马逊佣金15%FBA_FEE = 4.0  # FBA费用$4# 计算利润def calculate_profit(row):    price = row['price']    # 成本    purchase_cost = price * PURCHASE_COST_RATIO    shipping_cost = SHIPPING_COST    amazon_fee = price * AMAZON_FEE_RATIO    fba_fee = FBA_FEE    # 总成本    total_cost = purchase_cost + shipping_cost + amazon_fee + fba_fee    # 利润    profit = price - total_cost    # 利润率    profit_margin = profit / price    # ROI    roi = profit / (purchase_cost + shipping_cost)    return {        'purchase_cost': purchase_cost,        'shipping_cost': shipping_cost,        'amazon_fee': amazon_fee,        'fba_fee': fba_fee,        'total_cost': total_cost,        'profit': profit,        'profit_margin': profit_margin,        'roi': roi    }# 应用计算profit_data = df.apply(calculate_profit, axis=1, result_type='expand')df_profit = pd.concat([df, profit_data], axis=1)# 保存df_profit.to_csv("data/profit_analysis.csv", index=False, encoding='utf-8')# 输出统计print("利润统计:")print(f"平均利润率: {df_profit['profit_margin'].mean():.2%}")print(f"平均ROI: {df_profit['roi'].mean():.2%}")print(f"利润率>30%的产品数: {len(df_profit[df_profit['profit_margin'] > 0.3])}")

结果:

利润统计:平均利润率: 28.5%平均ROI: 85.3%利润率>30%的产品数: 156

筛选高利润产品

筛选出利润率>30%的产品:

import pandas as pd# 读取利润分析数据df_profit = pd.read_csv("data/profit_analysis.csv")# 筛选高利润产品df_high_profit = df_profit[df_profit['profit_margin'] > 0.3]# 按利润率排序df_high_profit = df_high_profit.sort_values('profit_margin', ascending=False)# 输出Top 20print("利润率Top 20产品:")print(df_high_profit[['keyword', 'title', 'price', 'profit_margin', 'roi']].head(20))

结果:

筛选出156个利润率>30%的产品。


选品结论

经过完整的选品流程,我们得出以下结论:

1. 最有潜力的品类

kitchen scale(厨房秤)

  • 平均价格$22.8,利润空间充足
  • 高端市场(3535-3548)竞争较小
  • 用户关注精准度、易用性

2. 需要避免的品类

measuring cups(量杯)

  • 平均价格$16.5,利润空间有限
  • 价格非常集中,竞争激烈
  • 利润率普遍偏低

3. 产品改进方向

从Review分析可以看出:

  • 提升产品质量(避免易碎、易坏)
  • 确保产品锋利度(针对切碎器、蒜泥器)
  • 提供多种尺寸选择
  • 设计易清洁的结构

4. 定价策略

  • 主流价格区间:2020-2030
  • 蓝海价格区间:3535-3545(针对高端市场)
  • 建议定价:2525-2535(平衡竞争和利润)

我的踩坑经历

坑1:一开始选错了关键词

刚开始做厨房用品选品的时候,我选了一个很泛的关键词"kitchen tools"。结果采集了上千个产品,分析起来很困难,而且数据太杂,没法得出有价值的结论。

教训: 关键词要具体,不要太泛。选择细分品类,数据更集中,分析更有针对性。

坑2:忽略了季节性

有一次我分析了一个厨房用品品类,数据看起来很好,结果上架后发现销量很差。后来才发现,这个品类是季节性产品(比如烧烤工具),我分析的时候正好是旺季,数据被高估了。

教训: 分析数据时要考虑季节性,最好看过去12个月的数据,而不是只看当前数据。

坑3:过度依赖数据

有一次我完全按照数据选品,选了一个利润率很高的产品。结果上架后发现,这个产品虽然利润率高,但退货率也很高(因为产品质量问题)。数据没有反映出退货率这个关键指标。

教训: 数据是参考,但不是唯一依据。还要结合实际经验、市场趋势、用户反馈等多方面因素。


今天的作业

  1. 选一个你感兴趣的品类(不一定是厨房用品)
  2. 用今天的流程走一遍:采集→清洗→筛选→关键词分析→竞品跟踪→价格带分析→Review分析→利润计算
  3. 写下你的选品结论
  4. 把分析结果截图发到评论区

遇到问题? 把报错信息或疑问发到评论区,我来帮你解决。


💡 觉得有用?点个在看,分享给做亚马逊的朋友。留言告诉我:你选了什么品类?分析结果如何?


数据来源声明

  • 本文代码示例仅供学习参考,实际使用时请根据具体需求调整
  • 数据来自Amazon公开页面,仅用于个人学习研究
  • 分析结果仅供参考,实际选品需结合市场情况
  • 大规模数据采集请遵守相关法律法规和网站robots协议
  • 建议使用官方API(如Amazon Product Advertising API)进行数据采集