京东商品比价Excel处理
快速从京东采集商品数据,自动填充和计算Excel表格。
快速开始
最常见的用法:
- 用户提供Excel文件 + 京东链接列表
- 我读取Excel,提取SKU ID
- 逐个访问京东页面采集数据
- 填充R/S/T/L/M/O列,计算差价
- 保存文件
核心代码:
from openpyxl import load_workbook
# 读取
wb = load_workbook('商品表.xlsx')
ws = wb.active
# 更新单元格
ws['T4'] = '100万+' # 累计评价
ws['L4'] = 17.90 # 京东价
ws['M4'] = 14.90 # 到手价
ws['O4'] = round(14.90 - 17.90, 2) # 差价
# 保存
wb.save('商品表.xlsx')
工作流程
第一步:读取Excel,建立商品清单
from openpyxl import load_workbook
wb = load_workbook('文件名.xlsx')
ws = wb.active
# 提取所有SKU
skus = {}
for i in range(4, 52): # 从第4行开始
r = ws[f'R{i}'].value
if r and 'item.jd.com/' in str(r):
sku = str(r).split('item.jd.com/')[1].split('.html')[0]
skus[sku] = i
关键列说明: | 列 | 内容 | 来源 | |----|------|------| | R | 京东链接 | 用户提供 | | G | 商品规格 | 用户提供 | | S | 店铺类型 | 京东页面 | | T | 累计评价数 | 京东页面 | | L | 京东价/划线价 | 京东页面 | | M | 到手价 | 京东页面 | | O | 差价 = M - L | 自动计算 |
第二步:采集京东SKU数据
访问 https://item.jd.com/{SKU_ID}.html 采集三个关键数据:
| 数据 | 说明 | 格式 |
|------|------|------|
| 累计评价 | 页面"累计评价"数值 | 100万+、20万+、2000+ |
| 京东价 | SKU默认规格的划线价 | 17.90 |
| 到手价 | 优惠后的实际价格 | 14.90 |
采集方式优先级:
web_fetch抓取页面HTMLbrowser打开页面截图- 如均失败,告知用户需手动核实
关键提示:
- ⚠️ 必须用"累计评价",不是"评价"
- 同一SKU多行时,T列应相同
- 价格保留2位小数
第三步:更新T列(累计评价数)
# 统一格式:万+
ws['T4'] = '100万+' # ✅ 正确
ws['T5'] = '20万+' # ✅ 正确
ws['T6'] = '2000+' # ✅ 正确
# ws['T7'] = '100W+' # ❌ 错误,禁止用W+
第四步:多规格价格换算
只在规格不匹配时使用。公式:
换算价格 = (京东SKU价格 ÷ SKU规格g数) × 表格规格g数
实例:
- 京东SKU:125g×3瓶 = 32.06元
- 表格规格:99g×3瓶
- 计算:
(32.06 ÷ 3 ÷ 125) × 99 × 3 = 25.39元
# 单价 = 32.06 / 3 / 125 = 0.0856元/g
# 表格价 = 0.0856 * 99 * 3 = 25.39元
new_price = round((32.06 / 3 / 125) * 99 * 3, 2)
换算要点:
- L列和M列都需要换算
- 必须基于同一SKU的不同规格
- 不能跨SKU换算
第五步:计算O列(差价)
# 逐行计算差价 = 到手价 - 京东价
for i in range(4, 52):
l_val = ws[f'L{i}'].value
m_val = ws[f'M{i}'].value
if l_val and m_val:
try:
l_num = float(str(l_val).replace(',', ''))
m_num = float(str(m_val).replace(',', ''))
ws[f'O{i}'] = round(m_num - l_num, 2)
except:
pass
第六步:数据完整性检查
保存前验证:
# 检查关键列是否填写完整
for i in range(4, 52):
if not all([ws[f'{col}{i}'].value for col in ['R','S','T','L','M']]):
print(f"行{i}缺少数据")
# 检查O列是否计算
if ws[f'O{i}'].value is None:
print(f"行{i}差价未计算")
第七步:保存文件
wb.save('商品表.xlsx')
print("✅ 文件已保存")
注意事项
- 累计评价 vs 评价:必须使用"累计评价",而非"评价"数,两者差异很大
- 价格来源:优先使用京东自营/旗舰店价格
- 多规格换算:必须基于同一SKU的不同规格换算,不能跨SKU换算
- 数据一致性:同一SKU链接对应多行时,T列(累计评价)应相同
- 保存前验证:确认O列已全部计算,无空值
- 编码安全:使用openpyxl读写,避免编码问题
常见问题
Q1: 如何区分"评价"和"累计评价"?
- 评价:最近一段时间的评价数(会变化)
- 累计评价:商品上架以来的总评价数(只增不减)
- 京东页面通常在商品详情下方显示"累计评价"
Q2: 多个规格的商品如何处理?
同一SKU有多个规格时:
- 所有行使用同一个R列链接
- 所有行的T列(累计评价)相同
- L/M列按各自规格换算
Q3: 价格换算出错怎么办?
检查:
- SKU规格是否正确(如125g vs 100g)
- 是否混淆了单位(g vs ml)
- 是否包含了瓶数/包数(如3瓶)
Q4: 京东页面无法访问怎么办?
- 检查网络连接
- 尝试用浏览器手动访问确认链接有效
- 如持续失败,告知用户需手动填写
工作示例
输入:用户提供Excel + 3个京东链接
R4: https://item.jd.com/100046323779.html
R5: https://item.jd.com/100141667624.html
R6: https://item.jd.com/100134415410.html
输出:自动填充
行4: T=100万+, L=17.90, M=14.90, O=-3.00
行5: T=100万+, L=36.90, M=32.06, O=-4.84
行6: T=20万+, L=22.90, M=18.76, O=-4.14
Scan to contact