在电商数据分析和系统集成领域,京东API提供了强大的数据获取能力。本文将详细介绍如何通过京东开放平台的API接口获取商品详情数据,包括价格信息、主图、详情图以及商品评价等核心数据。
item_search 按关键字搜索商品
item_search_img 按图搜索京东商品(拍立淘)
item_search_shop 获得店铺的所有商品
item_history_price 获取商品历史价格信息
item_recommend 获取推荐商品列表
buyer_order_list 获取购买到的商品订单列表
buyer_order_datail 获取购买到的商品订单详情
upload_img 上传图片到JD
item_review 获得JD商品评论
cat_get 获得jd商品分类
一、京东API接入准备
1. 注册开发者账号
首先需要访问API开放平台注册开发者账号,完成企业或个人认证。
2. 创建应用获取密钥
在控制台创建应用后,系统会分配给你以下关键信息:
App Key:应用唯一标识
App Secret:用于签名的密钥
Access Token:访问令牌
python
复制
下载
# 示例配置
JD_CONFIG = {
'app_key': 'your_app_key',
'app_secret': 'your_app_secret',
'access_token': 'your_access_token',
'api_url': 'https://api.jd.com/routerjson'
}
二、获取商品基础信息
1. 商品详情API
京东的商品详情接口可以通过商品SKU ID获取基本信息。
python
复制
下载
import requests
import hashlib
import time
def get_jd_product_detail(sku_id):
method = 'jd.union.open.goods.promotiongoodsinfo.query'
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
params = {
'goodsReq': {
'skuIds': [sku_id],
'fields': 'sku_name,sku_price,image_url,coupon_info'
}
}
# 构造签名
sign_str = f'{JD_CONFIG["app_secret"]}access_token{JD_CONFIG["access_token"]}app_key{JD_CONFIG["app_key"]}method{method}timestamp{timestamp}v2.0{JD_CONFIG["app_secret"]}'
sign = hashlib.md5(sign_str.encode()).hexdigest().upper()
payload = {
'method': method,
'app_key': JD_CONFIG['app_key'],
'access_token': JD_CONFIG['access_token'],
'timestamp': timestamp,
'v': '2.0',
'sign': sign,
'param_json': json.dumps(params)
}
response = requests.post(JD_CONFIG['api_url'], data=payload)
return response.json()
2. 解析返回数据
成功调用后会返回JSON格式数据,包含:
商品名称(sku_name)
京东价(sku_price)
主图URL(image_url)
优惠信息(coupon_info)
三、获取商品图片数据
1. 主图获取
商品主图通常包含多张不同角度的展示图,可以从返回的image_url字段获取。
python
复制
下载
def extract_product_images(product_data):
images = []
if 'image_info' in product_data:
image_list = product_data['image_info']['image_list']
for img in image_list:
images.append({
'url': img['url'],
'type': 'main' # 主图标识
})
return images
2. 详情图获取
商品详情图需要调用专门的详情API:
python
复制
下载
def get_jd_product_desc(sku_id):
method = 'jd.union.open.goods.bigfield.query'
params = {
'skuIds': sku_id,
'fields': 'wareQD,wdesc'
}
# ... 构造签名和请求类似前面示例
response = requests.post(JD_CONFIG['api_url'], data=payload)
data = response.json()
# 解析详情图
desc_images = []
if 'wareQD' in data:
# 使用正则提取详情图中的图片URL
import re
pattern = re.compile(r'src="(https?://[^"]+\.(jpg|png|jpeg))"', re.I)
matches = pattern.finditer(data['wareQD'])
for match in matches:
desc_images.append(match.group(1))
return desc_images
四、获取商品价格信息
京东的价格体系较为复杂,包含多种价格类型:
python
复制
下载
def parse_price_info(product_data):
price_info = {
'jd_price': product_data.get('priceInfo', {}).get('price'),
'original_price': product_data.get('priceInfo', {}).get('originPrice'),
'plus_price': product_data.get('priceInfo', {}).get('plusPrice'), # PLUS会员价
'discount': product_data.get('priceInfo', {}).get('discount'),
'coupons': []
}
# 解析优惠券信息
if 'couponInfo' in product_data:
for coupon in product_data['couponInfo']['couponList']:
price_info['coupons'].append({
'discount': coupon['discount'],
'quota': coupon['quota'],
'time_range': f"{coupon['useStartTime']}-{coupon['useEndTime']}"
})
return price_info
五、获取商品评价数据
京东评价API可以获取商品的好评率、评价数量等数据:
python
复制
下载
def get_jd_product_comments(sku_id, page=1, page_size=10):
method = 'jd.union.open.goods.comments.query'
params = {
'skuId': sku_id,
'pageNo': page,
'pageSize': page_size,
'type': 1 # 1:好评 2:中评 3:差评 4:晒图
}
# ... 构造签名和请求
response = requests.post(JD_CONFIG['api_url'], data=payload)
data = response.json()
comments = []
if 'comments' in data:
for comment in data['comments']:
comments.append({
'user': comment['nickname'],
'content': comment['content'],
'score': comment['score'],
'time': comment['creationTime'],
'images': [img['url'] for img in comment['images']] if 'images' in comment else []
})
return {
'good_rate': data.get('goodRate'),
'total_count': data.get('commentsCount'),
'comments': comments
}
六、完整数据获取流程
python
复制
下载
def get_full_product_info(sku_id):
# 1. 获取基础信息
base_info = get_jd_product_detail(sku_id)
# 2. 获取详情数据
desc_images = get_jd_product_desc(sku_id)
# 3. 获取评价数据
comments = get_jd_product_comments(sku_id)
# 整合所有数据
full_data = {
'base_info': base_info,
'price_info': parse_price_info(base_info),
'images': {
'main_images': extract_product_images(base_info),
'desc_images': desc_images
},
'comments': comments
}
return full_data
七、注意事项与优化建议
频率限制:京东API有严格的调用频率限制,建议添加适当的延迟和缓存机制
错误处理:完善各种错误情况的处理逻辑
数据缓存:对不常变动的数据(如商品详情)进行本地缓存
异步处理:对于大量数据获取,考虑使用异步请求提高效率
合规使用:严格遵守京东API使用协议,不进行违规数据采集
结语
通过京东开放平台API,开发者可以合法合规地获取丰富的商品数据。本文介绍了从基础信息到价格、图片、评价等完整的数据获取流程,实际应用中可根据需求进行扩展和优化。正确使用这些API可以为价格监控、竞品分析、商品推荐等应用场景提供可靠的数据支持。