
📌 本文是《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万) 利润空间:价格区间在 15-15−50之间15 −
对于厨房用品,我选了这几个关键词:
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步:初步筛选
数据清洗完后,需要根据一些基本标准做初步筛选。
我的筛选标准是:
价格: 15-15−50(太低利润薄,太高竞争大)15 − 评论数: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)结果:
从数据看:
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:主流价格区间 20-20−30,标准差较大,说明价格分散20 − garlic mincer:主流价格区间 15-15−20,价格集中,竞争激烈15 − kitchen scale:主流价格区间 18-18−28,但高端市场($35+)产品较少18 − measuring cups:主流价格区间 15-15−18,价格非常集中,利润空间有限15 − cutting board:主流价格区间 20-20−35,高端市场($40+)有机会20 −
蓝海机会:
kitchen scale 的高端市场( 35-35−48)产品较少,竞争相对较小35 − cutting board 的高端市场( 40-40−50)也有机会40 −
第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,利润空间充足 高端市场( 35-35−48)竞争较小35 − 用户关注精准度、易用性
2. 需要避免的品类
measuring cups(量杯)
平均价格$16.5,利润空间有限 价格非常集中,竞争激烈 利润率普遍偏低
3. 产品改进方向
从Review分析可以看出:
提升产品质量(避免易碎、易坏) 确保产品锋利度(针对切碎器、蒜泥器) 提供多种尺寸选择 设计易清洁的结构
4. 定价策略
主流价格区间: 20-20−3020 − 蓝海价格区间: 35-35−45(针对高端市场)35 − 建议定价: 25-25−35(平衡竞争和利润)25 −
我的踩坑经历
坑1:一开始选错了关键词
刚开始做厨房用品选品的时候,我选了一个很泛的关键词"kitchen tools"。结果采集了上千个产品,分析起来很困难,而且数据太杂,没法得出有价值的结论。
教训: 关键词要具体,不要太泛。选择细分品类,数据更集中,分析更有针对性。
坑2:忽略了季节性
有一次我分析了一个厨房用品品类,数据看起来很好,结果上架后发现销量很差。后来才发现,这个品类是季节性产品(比如烧烤工具),我分析的时候正好是旺季,数据被高估了。
教训: 分析数据时要考虑季节性,最好看过去12个月的数据,而不是只看当前数据。
坑3:过度依赖数据
有一次我完全按照数据选品,选了一个利润率很高的产品。结果上架后发现,这个产品虽然利润率高,但退货率也很高(因为产品质量问题)。数据没有反映出退货率这个关键指标。
教训: 数据是参考,但不是唯一依据。还要结合实际经验、市场趋势、用户反馈等多方面因素。
今天的作业
选一个你感兴趣的品类(不一定是厨房用品) 用今天的流程走一遍:采集→清洗→筛选→关键词分析→竞品跟踪→价格带分析→Review分析→利润计算 写下你的选品结论 把分析结果截图发到评论区
遇到问题? 把报错信息或疑问发到评论区,我来帮你解决。

💡 觉得有用?点个在看,分享给做亚马逊的朋友。留言告诉我:你选了什么品类?分析结果如何?
数据来源声明
本文代码示例仅供学习参考,实际使用时请根据具体需求调整 数据来自Amazon公开页面,仅用于个人学习研究 分析结果仅供参考,实际选品需结合市场情况 大规模数据采集请遵守相关法律法规和网站robots协议 建议使用官方API(如Amazon Product Advertising API)进行数据采集
夜雨聆风