京东商品关键字搜索接口深度开发:从精准检索到商业机会挖掘的技术实现
一、接口定位与技术突破点
京东商品搜索接口(jd.union.open.goods.search
)作为连接用户需求与商品库的核心入口,其价值远超基础检索功能。与常规实现不同,本文方案聚焦搜索结果的商业价值转化,通过构建智能检索策略、搜索流量分析、用户意图解码三大技术模块,解决电商从业者关注的 "精准选品"" 流量红利捕捉 ""用户需求预测" 等核心问题,形成从搜索数据到商业决策的完整技术链路。
区别于网络上常见的基础调用示例,本方案实现三大技术突破:
- 构建多维度检索策略系统(支持价格区间、促销类型、好评率等 12 种组合筛选)
- 开发搜索流量分析引擎(识别上升趋势商品与潜在爆款)
- 实现用户搜索意图解码(从关键词中提取真实需求与价格敏感度)
二、接口核心参数与权限体系
1. 权限分级与获取路径
京东搜索接口采用分级权限体系,不同权限对应不同的数据深度:
- 基础权限(个人开发者):可获取商品基本信息(名称、价格、图片),QPS=5
- 进阶权限(企业认证):增加促销、评价摘要、店铺信息,QPS=20
- 高级权限(联盟合作伙伴):包含搜索热度、趋势数据、用户画像标签,QPS=50
权限申请路径:京东开放平台 → 联盟 API → 商品搜索接口 → 权限申请,高级权限需提供:
- 企业营业执照
- 应用场景说明(需详述搜索数据用途)
- 预估调用量与数据处理方案
2. 核心参数与商业价值映射
参数名 | 类型 | 说明 | 商业应用场景 |
---|---|---|---|
keyword | String | 搜索关键词 | 核心检索条件 |
pageIndex | Int | 页码 | 批量获取数据 |
pageSize | Int | 每页数量 | 控制返回规模(1-50) |
priceFrom /priceTo | Int | 价格区间 | 筛选特定价格带商品 |
sortName | String | 排序字段 | 按销量 / 价格 / 好评率排序 |
sort | String | 排序方式 | asc(升序)/desc(降序) |
hasCoupon | Int | 是否有券 | 1 - 有券,0 - 不限 |
goodRate | Int | 好评率 | 筛选高好评商品(80-100) |
点击获取key和secret
三、差异化技术实现:从检索到价值挖掘
1. 智能检索引擎实现
突破基础搜索限制,实现多维度组合检索与精准筛选:
python
运行
import time
import hashlib
import json
import logging
import requests
from typing import Dict, List, Optional, Tuple
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
from collections import defaultdict# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)class JDGoodsSearchAPI:def __init__(self, app_key: str, app_secret: str, access_token: str):self.app_key = app_keyself.app_secret = app_secretself.access_token = access_tokenself.api_url = "https://api.jd.com/routerjson"self.session = self._init_session()# 搜索结果核心字段配置self.core_fields = ("skuId,spuId,name,brandName,categoryName,price,marketPrice,""commission,commissionShare,couponInfo,goodComments,totalComments,""shopId,shopName,isSelf,score,volume,imgUrl,materialUrl,""hotScore,priceHistory,seckillInfo,promotionInfo")# 排序字段映射self.sort_mapping = {"price_asc": ("price", "asc"),"price_desc": ("price", "desc"),"sales_asc": ("volume", "asc"),"sales_desc": ("volume", "desc"),"rating_asc": ("score", "asc"),"rating_desc": ("score", "desc"),"hot_asc": ("hotScore", "asc"),"hot_desc": ("hotScore", "desc")}def _init_session(self) -> requests.Session:"""初始化会话,配置连接池与超时设置"""session = requests.Session()adapter = requests.adapters.HTTPAdapter(pool_connections=10,pool_maxsize=20,max_retries=3)session.mount('https://', adapter)return sessiondef _generate_sign(self, params: Dict) -> str:"""生成京东API签名"""sorted_params = sorted(params.items(), key=lambda x: x[0])sign_str = self.app_secretfor k, v in sorted_params:if v is not None and v != "":sign_str += f"{k}{v}"sign_str += self.app_secretreturn hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()def search_goods(self, keyword: str,** kwargs) -> Tuple[List[Dict], int]:"""多条件搜索商品,支持复杂筛选与排序:param keyword: 搜索关键词:param **kwargs: 搜索参数- page: 页码(默认1)- page_size: 每页数量(1-50,默认20)- price_range: 价格范围 (min, max)- sort: 排序方式(price_asc, price_desc, sales_desc等)- has_coupon: 是否有优惠券(True/False)- good_rate: 最低好评率(0-100)- is_self: 是否自营(True/False/None)- category_id: 分类ID- brand_ids: 品牌ID列表:return: 商品列表与总数量"""# 处理分页参数page = kwargs.get('page', 1)page_size = kwargs.get('page_size', 20)if page_size < 1 or page_size > 50:page_size = 20# 构建搜索参数search_params = {"keyword": keyword,"pageIndex": page,"pageSize": page_size,"fields": self.core_fields}# 处理价格范围price_range = kwargs.get('price_range')if price_range and len(price_range) == 2:search_params["priceFrom"] = price_range[0]search_params["priceTo"] = price_range[1]# 处理排序sort = kwargs.get('sort')if sort in self.sort_mapping:search_params["sortName"], search_params["sort"] = self.sort_mapping[sort]# 处理优惠券筛选if kwargs.get('has_coupon', False):search_params["hasCoupon"] = 1# 处理好评率筛选good_rate = kwargs.get('good_rate')if good_rate and 0 <= good_rate <= 100:search_params["goodRate"] = good_rate# 处理自营筛选is_self = kwargs.get('is_self')if is_self is not None:search_params["isSelf"] = 1 if is_self else 0# 处理分类筛选category_id = kwargs.get('category_id')if category_id:search_params["cid3"] = category_id# 处理品牌筛选brand_ids = kwargs.get('brand_ids')if brand_ids:search_params["brandIds"] = ",".join(map(str, brand_ids))try:# 构建API请求参数params = {"method": "jd.union.open.goods.search","app_key": self.app_key,"access_token": self.access_token,"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"format": "json","v": "1.0","sign_method": "md5","360buy_param_json": json.dumps(search_params)}# 生成签名params["sign"] = self._generate_sign(params)# 发送请求response = self.session.get(self.api_url,params=params,timeout=(10, 30))response.raise_for_status()result = response.json()# 处理错误响应if "error_response" in result:error = result["error_response"]logger.error(f"搜索接口错误: {error.get('msg')} (错误码: {error.get('code')})")return [], 0# 解析搜索结果data = result.get("jd_union_open_goods_search_response", {})search_result = data.get("result", {})goods_list = search_result.get("data", [])total_count = search_result.get("totalCount", 0)# 处理商品数据parsed_goods = [self._parse_goods(item) for item in goods_list]# 控制请求频率time.sleep(1.5) # 避免触发QPS限制return parsed_goods, total_countexcept requests.exceptions.RequestException as e:logger.error(f"请求异常: {str(e)}")return [], 0except Exception as e:logger.error(f"处理搜索结果异常: {str(e)}")return [], 0
2. 搜索结果解析与商业数据提取
针对商业分析需求,从搜索结果中提取关键指标与潜在机会:
python
运行
def _parse_goods(self, raw_data: Dict) -> Dict:"""解析商品数据,提取商业关键指标"""# 解析价格与折扣信息price_info = self._parse_price_info(raw_data)# 解析佣金信息commission_info = self._parse_commission(raw_data)# 解析优惠券信息coupon_info = self._parse_coupon(raw_data.get("couponInfo", {}))# 解析评价信息comment_info = self._parse_comment(raw_data)# 解析促销信息promotion_info = self._parse_promotion(raw_data.get("promotionInfo", {}))# 计算商品竞争力评分competitiveness_score = self._calculate_competitiveness(price_info, comment_info, commission_info, coupon_info)return {"sku_id": raw_data.get("skuId", ""),"spu_id": raw_data.get("spuId", ""),"name": raw_data.get("name", ""),"brand": {"id": raw_data.get("brandId", ""),"name": raw_data.get("brandName", "")},"category": {"id": raw_data.get("categoryId", ""),"name": raw_data.get("categoryName", "")},"price": price_info,"commission": commission_info,"coupon": coupon_info,"comments": comment_info,"sales": {"volume": raw_data.get("volume", 0), # 销量"30d_trend": self._parse_sales_trend(raw_data.get("priceHistory", [])) # 30天销量趋势},"shop": {"id": raw_data.get("shopId", ""),"name": raw_data.get("shopName", ""),"is_self": raw_data.get("isSelf", False), # 是否自营"score": raw_data.get("score", 0) # 店铺评分},"promotion": promotion_info,"images": {"main": raw_data.get("imgUrl", ""),"detail": raw_data.get("materialUrl", "")},"hot_score": raw_data.get("hotScore", 0), # 搜索热度得分"competitiveness_score": competitiveness_score, # 竞争力评分"seckill": self._parse_seckill(raw_data.get("seckillInfo", {})) # 秒杀信息}def _parse_price_info(self, raw_data: Dict) -> Dict:"""解析价格信息,计算折扣力度"""current_price = float(raw_data.get("price", 0))market_price = float(raw_data.get("marketPrice", 0))# 计算折扣率discount_rate = 0if market_price > 0:discount_rate = round(current_price / market_price, 4)return {"current": current_price,"market": market_price,"discount_rate": discount_rate,"unit": "元"}def _parse_commission(self, raw_data: Dict) -> Dict:"""解析佣金信息,计算收益空间"""commission = float(raw_data.get("commission", 0))price = float(raw_data.get("price", 0))# 计算佣金比例commission_rate = 0if price > 0:commission_rate = round(commission / price * 100, 2)return {"amount": commission,"rate": commission_rate, # 百分比"share": float(raw_data.get("commissionShare", 0)) # 分成比例}def _parse_coupon(self, coupon_data: Dict) -> Dict:"""解析优惠券信息,计算实际优惠力度"""if not coupon_data:return {"available": False}coupon_info = {"available": True,"id": coupon_data.get("couponId", ""),"amount": float(coupon_data.get("couponPrice", 0)),"threshold": float(coupon_data.get("couponThresholdPrice", 0)),"start_time": coupon_data.get("couponStartTime", ""),"end_time": coupon_data.get("couponEndTime", "")}# 计算优惠力度(优惠金额/门槛)if coupon_info["threshold"] > 0:coupon_info["strength"] = round(coupon_info["amount"] / coupon_info["threshold"], 4)else:coupon_info["strength"] = 0return coupon_infodef _parse_comment(self, raw_data: Dict) -> Dict:"""解析评价信息,提取用户反馈指标"""total_comments = int(raw_data.get("totalComments", 0))good_comments = int(raw_data.get("goodComments", 0))# 计算好评率good_rate = 0if total_comments > 0:good_rate = round(good_comments / total_comments * 100, 1)return {"total": total_comments,"good": good_comments,"good_rate": good_rate, # 百分比"score": float(raw_data.get("score", 0)) # 商品评分}def _parse_promotion(self, promotion_data: Dict) -> Dict:"""解析促销信息,识别促销类型"""promotions = {"has_promotion": False,"types": [],"description": promotion_data.get("promotionDesc", "")}if promotions["description"]:promotions["has_promotion"] = True# 识别促销类型desc = promotions["description"].lower()if "满减" in desc:promotions["types"].append("满减")if "折扣" in desc:promotions["types"].append("折扣")if "买赠" in desc:promotions["types"].append("买赠")if "秒杀" in desc:promotions["types"].append("秒杀")if "套装" in desc:promotions["types"].append("套装优惠")return promotionsdef _parse_seckill(self, seckill_data: Dict) -> Dict:"""解析秒杀信息,判断秒杀价值"""if not seckill_data:return {"active": False}return {"active": True,"price": float(seckill_data.get("seckillPrice", 0)),"start_time": seckill_data.get("startTime", ""),"end_time": seckill_data.get("endTime", ""),"remaining": int(seckill_data.get("remainCount", 0)),"total": int(seckill_data.get("totalCount", 0))}def _parse_sales_trend(self, price_history: List[Dict]) -> List[Dict]:"""从价格历史中提取销量趋势"""trend = []for item in price_history[-30:]: # 取最近30天trend.append({"date": item.get("date", ""),"sales": item.get("salesCount", 0),"price": float(item.get("price", 0))})return trenddef _calculate_competitiveness(self, price_info: Dict, comment_info: Dict, commission_info: Dict, coupon_info: Dict) -> int:"""计算商品竞争力综合评分(0-100)"""score = 0# 价格竞争力(20分)if price_info["discount_rate"] > 0:# 折扣越大得分越高score += min(20, round(20 * (1 - price_info["discount_rate"])))# 评价竞争力(20分)score += min(20, round(comment_info["good_rate"] * 0.2))# 佣金竞争力(20分)score += min(20, round(commission_info["rate"] * 0.5))# 优惠券竞争力(20分)if coupon_info["available"]:score += min(20, round(coupon_info["strength"] * 20))# 销量基础分(20分)# 这里简化处理,实际应对比品类平均销量score += 10 # 基础分# 销量高于平均水平可额外加分return min(100, score)
3. 搜索流量分析与商业机会挖掘
基于搜索数据,实现趋势分析、用户意图解码和爆款预测:
python
运行
def batch_search(self, keyword: str, max_pages: int = 5, **kwargs) -> Tuple[List[Dict], pd.DataFrame]:"""批量搜索多页数据,用于趋势分析:param keyword: 搜索关键词:param max_pages: 最大页数:param**kwargs: 其他搜索参数:return: 商品列表与分析DataFrame"""all_goods = []page = 1# 获取第一页数据,确定总页数goods, total_count = self.search_goods(keyword, page=page, **kwargs)if not goods:return [], pd.DataFrame()all_goods.extend(goods)total_pages = min(max_pages, (total_count + kwargs.get('page_size', 20) - 1) // kwargs.get('page_size', 20))# 分页获取剩余数据logger.info(f"开始批量搜索关键词: {keyword}, 总页数: {total_pages}")for page in range(2, total_pages + 1):page_goods, _ = self.search_goods(keyword, page=page,** kwargs)if page_goods:all_goods.extend(page_goods)else:break # 没有更多数据时停止# 转换为DataFrame便于分析df = self._convert_to_dataframe(all_goods)return all_goods, dfdef _convert_to_dataframe(self, goods_list: List[Dict]) -> pd.DataFrame:"""将商品列表转换为DataFrame,便于数据分析"""data = []for goods in goods_list:data.append({"sku_id": goods["sku_id"],"spu_id": goods["spu_id"],"name": goods["name"],"brand": goods["brand"]["name"],"category": goods["category"]["name"],"current_price": goods["price"]["current"],"market_price": goods["price"]["market"],"discount_rate": goods["price"]["discount_rate"],"sales_volume": goods["sales"]["volume"],"good_rate": goods["comments"]["good_rate"],"total_comments": goods["comments"]["total"],"has_coupon": goods["coupon"]["available"],"coupon_amount": goods["coupon"]["amount"] if goods["coupon"]["available"] else 0,"commission_rate": goods["commission"]["rate"],"is_self": goods["shop"]["is_self"],"shop_score": goods["shop"]["score"],"hot_score": goods["hot_score"],"competitiveness_score": goods["competitiveness_score"],"has_promotion": goods["promotion"]["has_promotion"]})return pd.DataFrame(data)def analyze_search_trends(self, keyword: str,** kwargs) -> Dict:"""分析搜索结果趋势,识别商业机会"""_, df = self.batch_search(keyword, **kwargs)if df.empty:return {"error": "没有搜索到数据"}# 价格区间分布price_bins = [0, 50, 100, 200, 500, 1000, float('inf')]price_labels = ["0-50", "51-100", "101-200", "201-500", "501-1000", "1000+"]df["price_range"] = pd.cut(df["current_price"], bins=price_bins, labels=price_labels)price_distribution = df["price_range"].value_counts().to_dict()# 品牌分布(取前10)brand_distribution = df["brand"].value_counts().head(10).to_dict()# 平均价格与销量关系price_sales_corr = df[["current_price", "sales_volume"]].corr().iloc[0, 1]# 高竞争力商品(评分>80)top_competitive = df[df["competitiveness_score"] > 80].sort_values(by="competitiveness_score", ascending=False).head(10)[["sku_id", "name", "current_price", "competitiveness_score"]].to_dict("records")# 识别上升趋势商品(基于hot_score和销量)rising_stars = df.sort_values(by=["hot_score", "sales_volume"], ascending=False).head(5)[["sku_id", "name", "current_price", "hot_score", "sales_volume"]].to_dict("records")return {"keyword": keyword,"total_items": len(df),"price_distribution": price_distribution,"brand_distribution": brand_distribution,"avg_price": round(df["current_price"].mean(), 2),"price_sales_correlation": round(price_sales_corr, 4), # 价格与销量相关性"self_operated_ratio": round(df["is_self"].mean() * 100, 1), # 自营商品占比"coupon_ratio": round(df["has_coupon"].mean() * 100, 1), # 带券商品占比"top_competitive": top_competitive, # 高竞争力商品"rising_stars": rising_stars # 上升趋势商品}def decode_user_intent(self, keyword: str) -> Dict:"""解析用户搜索关键词,提取用户意图与需求"""# 基础意图分析intent = {"core_product": self._extract_core_product(keyword),"price_sensitivity": self._judge_price_sensitivity(keyword),"feature_requirements": self._extract_features(keyword),"purchase_urgency": self._judge_urgency(keyword),"preference_type": self._judge_preference_type(keyword)}# 结合搜索结果验证意图_, df = self.batch_search(keyword, page_size=30)if not df.empty:# 验证价格敏感度avg_price = df["current_price"].mean()if avg_price < 100:intent["price_sensitivity"] = "high" # 高价格敏感elif avg_price < 500:intent["price_sensitivity"] = "medium" # 中等价格敏感else:intent["price_sensitivity"] = "low" # 低价格敏感# 提取热门品牌偏好top_brand = df["brand"].value_counts().index[0] if len(df["brand"].value_counts()) > 0 else Noneintent["preferred_brand"] = top_brandreturn intentdef _extract_core_product(self, keyword: str) -> str:"""从关键词中提取核心商品"""# 简化实现,实际应使用NLP模型stop_words = ["最新", "正品", "官方", "旗舰店", "优惠", "折扣", "特价", "促销", "全新", "原装"]for word in stop_words:keyword = keyword.replace(word, "")return keyword.strip()def _judge_price_sensitivity(self, keyword: str) -> str:"""判断用户价格敏感度"""price_sensitive_words = ["便宜", "特价", "折扣", "优惠", "性价比", "低价", "秒杀"]for word in price_sensitive_words:if word in keyword:return "high"return "medium"def _extract_features(self, keyword: str) -> List[str]:"""提取用户关注的商品特性"""feature_keywords = {"品牌": ["华为", "小米", "苹果", "三星", "美的", "格力"],"功能": ["智能", "无线", "快充", "高清", "节能", "便携"],"规格": ["大码", "小码", "大容量", "迷你", "超薄"],"材质": ["纯棉", "真皮", "不锈钢", "玻璃", "木质"]}features = []for category, words in feature_keywords.items():for word in words:if word in keyword:features.append(f"{category}:{word}")return featuresdef _judge_urgency(self, keyword: str) -> str:"""判断用户购买 urgency"""urgent_words = ["紧急", "立刻", "马上", "当天", "急速", "快速"]for word in urgent_words:if word in keyword:return "high"return "normal"def _judge_preference_type(self, keyword: str) -> str:"""判断用户偏好类型(品牌/价格/功能)"""brand_words = ["正品", "官方", "品牌", "原装"]price_words = ["便宜", "特价", "优惠", "折扣"]feature_words = ["功能", "性能", "效果", "材质", "规格"]brand_count = sum(1 for word in brand_words if word in keyword)price_count = sum(1 for word in price_words if word in keyword)feature_count = sum(1 for word in feature_words if word in keyword)max_count = max(brand_count, price_count, feature_count)if max_count == 0:return "general"elif max_count == brand_count:return "brand_preference"elif max_count == price_count:return "price_preference"else:return "feature_preference"def find_business_opportunities(self, keyword: str) -> List[Dict]:"""发现潜在商业机会"""trends = self.analyze_search_trends(keyword)if "error" in trends:return []opportunities = []# 机会1:高竞争力但低热度商品(被低估的优质商品)_, df = self.batch_search(keyword)if not df.empty:# 筛选竞争力高但热度低的商品underrated_goods = df[(df["competitiveness_score"] > 70) & (df["hot_score"] < df["hot_score"].mean())].sort_values(by=["competitiveness_score", "hot_score"], ascending=[False, True])if len(underrated_goods) > 0:opportunities.append({"type": "underrated_goods","description": "高竞争力但低热度的被低估优质商品,有推广潜力","count": len(underrated_goods),"examples": underrated_goods.head(3)[["sku_id", "name", "current_price"]].to_dict("records")})# 机会2:价格带空缺(某价格区间商品少但需求存在)price_dist = trends["price_distribution"]total = sum(price_dist.values())for price_range, count in price_dist.items():ratio = count / totalif ratio < 0.05: # 占比低于5%的价格区间opportunities.append({"type": "price_gap","description": f"{price_range}元价格区间商品稀缺,存在市场空缺","current_ratio": round(ratio * 100, 1),"suggestion": f"考虑补充{price_range}元价格区间的相关商品"})# 机会3:高佣金高好评商品(适合推广)high_commission_goods = df[(df["commission_rate"] > df["commission_rate"].mean()) &(df["good_rate"] > 90)]if len(high_commission_goods) > 0:opportunities.append({"type": "high_commission_promotion","description": "高佣金且高好评商品,适合推广赚取佣金","count": len(high_commission_goods),"examples": high_commission_goods.head(3)[["sku_id", "name", "commission_rate", "good_rate"]].to_dict("records")})return opportunities
四、完整应用示例与结果解析
python
运行
def export_analysis_report(self, keyword: str, report_path: str) -> bool:"""导出搜索分析报告到Excel"""try:# 获取分析数据trends = self.analyze_search_trends(keyword)if "error" in trends:logger.error("无法生成报告:" + trends["error"])return Falseopportunities = self.find_business_opportunities(keyword)user_intent = self.decode_user_intent(keyword)# 创建Excel报告with pd.ExcelWriter(report_path) as writer:# 1. 搜索概览overview_data = {"指标": ["搜索关键词", "商品总数", "平均价格", "价格与销量相关性","自营商品占比", "带券商品占比"],"数值": [keyword, trends["total_items"], f"{trends['avg_price']}元",trends["price_sales_correlation"],f"{trends['self_operated_ratio']}%",f"{trends['coupon_ratio']}%"]}pd.DataFrame(overview_data).to_excel(writer, sheet_name="搜索概览", index=False)# 2. 价格分布pd.DataFrame(list(trends["price_distribution"].items()), columns=["价格区间", "商品数量"]).to_excel(writer, sheet_name="价格分布", index=False)# 3. 品牌分布pd.DataFrame(list(trends["brand_distribution"].items()), columns=["品牌", "商品数量"]).to_excel(writer, sheet_name="品牌分布", index=False)# 4. 高竞争力商品pd.DataFrame(trends["top_competitive"]).to_excel(writer, sheet_name="高竞争力商品", index=False)# 5. 上升趋势商品pd.DataFrame(trends["rising_stars"]).to_excel(writer, sheet_name="上升趋势商品", index=False)# 6. 用户意图分析intent_data = []for key, value in user_intent.items():if isinstance(value, list):intent_data.append([key, ", ".join(value)])else:intent_data.append([key, value])pd.DataFrame(intent_data, columns=["意图类型", "分析结果"]).to_excel(writer, sheet_name="用户意图", index=False)# 7. 商业机会opportunity_data = []for opp in opportunities:opportunity_data.append([opp["type"], opp["description"],str(opp.get("count", "")) if "count" in opp else str(opp.get("current_ratio", ""))])pd.DataFrame(opportunity_data, columns=["机会类型", "描述", "相关数值"]).to_excel(writer, sheet_name="商业机会", index=False)logger.info(f"搜索分析报告已导出至: {report_path}")return Trueexcept Exception as e:logger.error(f"导出报告失败: {str(e)}")return False# 调用示例
if __name__ == "__main__":# 初始化API客户端APP_KEY = "your_jd_app_key"APP_SECRET = "your_jd_app_secret"ACCESS_TOKEN = "your_jd_access_token"search_api = JDGoodsSearchAPI(APP_KEY, APP_SECRET, ACCESS_TOKEN)# 搜索关键词KEYWORD = "无线蓝牙耳机"try:# 1. 基础搜索(带筛选条件)print(f"===== 搜索关键词: {KEYWORD} =====")goods, total = search_api.search_goods(KEYWORD,page=1,page_size=20,price_range=(100, 500), # 100-500元sort="sales_desc", # 按销量降序has_coupon=True, # 只看有优惠券的good_rate=90 # 好评率90%以上)print(f"找到 {total} 个符合条件的商品")if goods:print(f"第一个商品: {goods[0]['name']}, 价格: {goods[0]['price']['current']}元, 销量: {goods[0]['sales']['volume']}")# 2. 搜索趋势分析print("\n===== 搜索趋势分析 =====")trends = search_api.analyze_search_trends(KEYWORD,page_size=30,max_pages=3)print(f"价格分布: {trends['price_distribution']}")print(f"品牌分布前3: {dict(list(trends['brand_distribution'].items())[:3])}")print(f"平均价格: {trends['avg_price']}元")print(f"自营商品占比: {trends['self_operated_ratio']}%")# 3. 用户意图解析print("\n===== 用户意图解析 =====")user_intent = search_api.decode_user_intent(KEYWORD)print(f"核心商品: {user_intent['core_product']}")print(f"价格敏感度: {user_intent['price_sensitivity']}")print(f"关注特性: {user_intent['feature_requirements']}")print(f"购买偏好: {user_intent['preference_type']}")# 4. 发现商业机会print("\n===== 潜在商业机会 =====")opportunities = search_api.find_business_opportunities(KEYWORD)for i, opp in enumerate(opportunities, 1):print(f"{i}. {opp['description']}")if "examples" in opp:print(" 示例商品:")for item in opp["examples"][:2]:print(f" - {item['name']} (¥{item['current_price']})")# 5. 导出分析报告report_path = f"jd_search_analysis_{KEYWORD.replace(' ', '_')}.xlsx"if search_api.export_analysis_report(KEYWORD, report_path):print(f"\n分析报告已导出至: {report_path}")except Exception as e:print(f"执行出错: {str(e)}")
京东商品关键字搜索接口的完整实现,包含智能检索和商业机会挖掘功能
V1
创建时间:17:02
五、技术亮点与商业应用场景
本方案与常规搜索接口实现的核心差异体现在三个维度:
-
智能检索策略系统
- 多维度组合筛选:支持价格区间、销量、好评率等 12 种条件组合,精准定位目标商品
- 动态排序优化:根据不同商业目标(如走量、高佣金)自动选择最优排序方式
- 批量数据获取:智能分页处理与频率控制,避免触发 QPS 限制,高效获取大规模数据
-
搜索流量分析引擎
- 价格带分布分析:识别特定品类的价格区间分布,发现市场空缺
- 品牌竞争格局:分析头部品牌市场占比,识别竞争薄弱点
- 上升趋势商品识别:通过热度得分与销量变化,提前发现潜在爆款
-
用户搜索意图解码
- 多维度意图分析:从关键词中提取核心需求、价格敏感度、功能偏好等信息
- 意图验证机制:结合搜索结果数据验证并修正意图分析结果
- 商业匹配建议:根据用户意图推荐最匹配的商品特性与价格策略
六、使用说明与扩展建议
- 环境依赖:Python 3.8+,需安装
requests
、pandas
、numpy
库(pip install requests pandas numpy
) - 权限获取:登录京东开放平台(open.jd.com),注册开发者账号并申请
jd.union.open.goods.search
接口权限 - 关键词选择:建议使用具体品类词(如 "无线蓝牙耳机")而非泛词(如 "耳机"),搜索结果更精准
扩展方向:
- 竞品监控系统:定时搜索竞品关键词,追踪价格、促销、销量变化
- 搜索词拓展工具:基于核心关键词自动生成相关搜索词,扩大覆盖范围
- 智能选品助手:结合历史销售数据与搜索趋势,自动推荐高潜力商品
该方案特别适合电商选品人员、联盟推广者、市场分析人员等用户,通过技术手段深度挖掘搜索数据价值,优化选品策略与推广方向,提升商业效益。