你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成API 憑證配置、接口請求(含簽名)、響應(yīng)數(shù)據(jù)解析、異常處理的全流程落地,我會提供可直接運(yùn)行的代碼,并詳解關(guān)鍵步驟和數(shù)據(jù)解析技巧,適配新手快速上手。
一、前置準(zhǔn)備
1. 必備條件
已完成 1688 開放平臺開發(fā)者認(rèn)證(個(gè)人 / 企業(yè)),創(chuàng)建自研應(yīng)用,獲取AppKey和AppSecret(參考之前的 1688 API 接入流程);
安裝 Python 依賴:
bash
運(yùn)行
pip install requests # 發(fā)送HTTP請求 pip install dicttoxml # 可選,處理XML格式響應(yīng)(1688部分接口返回XML) pip install python-dotenv # 管理環(huán)境變量,避免硬編碼憑證
2. 核心接口選型
1688 商品詳情的核心接口為:alibaba.item.get(獲取商品基礎(chǔ)信息)和alibaba.item.sku.get(獲取 SKU / 價(jià)格 / 庫存信息),本次實(shí)戰(zhàn)以alibaba.item.get為例,接口參數(shù)說明:
表格
| 參數(shù)名 | 必傳 | 說明 |
|---|---|---|
| app_key | 是 | 你的 AppKey |
| method | 是 | 接口名稱,固定為alibaba.item.get |
| format | 否 | 響應(yīng)格式,可選json/xml,推薦json |
| timestamp | 是 | 時(shí)間戳(格式:yyyy-MM-dd HH:mm:ss,如 2026-02-10 15:30:00) |
| v | 是 | 接口版本,固定為2.0 |
| sign | 是 | 簽名(MD5 加密,1688 簽名規(guī)則) |
| offer_id | 是 | 商品 ID(1688 商品鏈接中offerId=后的數(shù)字,如699988776655) |
| fields | 否 | 指定返回字段,如title,price,sku,description,不傳返回全部字段 |
二、完整 Python 實(shí)戰(zhàn)代碼
1. 代碼實(shí)現(xiàn)(含簽名、請求、解析)
python
運(yùn)行
import requests import time import hashlib import json from dotenv import load_dotenv import os # 加載環(huán)境變量(建議將AppKey/Secret存放在.env文件,避免硬編碼) load_dotenv() APP_KEY = os.getenv("1688_APP_KEY") APP_SECRET = os.getenv("1688_APP_SECRET") def generate_1688_sign(params, app_secret): """ 生成1688 API簽名(核心:ASCII升序排序+MD5加密) :param params: 接口請求參數(shù)(dict) :param app_secret: 1688應(yīng)用的AppSecret :return: 簽名字符串 """ # 1. 按參數(shù)名ASCII升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接為key=value格式 sign_str = "" for k, v in sorted_params: if v is not None and v != "": sign_str += f"{k}{v}" # 3. 首尾拼接AppSecret,MD5加密后轉(zhuǎn)大寫 sign_str = app_secret + sign_str + app_secret sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper() return sign def get_1688_item_detail(offer_id): """ 調(diào)用1688商品詳情API,解析核心數(shù)據(jù) :param offer_id: 1688商品ID :return: 解析后的商品詳情字典 """ # 1. 構(gòu)造公共參數(shù) params = { "app_key": APP_KEY, "method": "alibaba.item.get", "format": "json", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "v": "2.0", "offer_id": offer_id, "fields": "title,price,sku_info,description,spec_info,image_urls,seller_info" # 指定返回字段 } # 2. 生成簽名并添加到參數(shù) params["sign"] = generate_1688_sign(params, APP_SECRET) # 3. 發(fā)送請求(1688 API網(wǎng)關(guān)地址) url = "https://gw.open.1688.com/openapi/param2/2/alibaba.item.get/2.0" try: response = requests.get(url, params=params, timeout=10) response.raise_for_status() # 拋出HTTP錯(cuò)誤(如403/500) result = response.json() except requests.exceptions.RequestException as e: print(f"API請求失敗:{e}") return None except json.JSONDecodeError: print("響應(yīng)數(shù)據(jù)不是JSON格式,可能是XML") return None # 4. 解析核心數(shù)據(jù)(過濾冗余字段,提取業(yè)務(wù)所需) if "error_response" in result: print(f"API調(diào)用錯(cuò)誤:{result['error_response']['msg']}(錯(cuò)誤碼:{result['error_response']['code']})") return None item_data = result.get("alibaba_item_get_response", {}).get("item", {}) parsed_data = { "商品ID": item_data.get("offer_id"), "商品標(biāo)題": item_data.get("title"), "價(jià)格(元)": item_data.get("price"), "商品主圖": item_data.get("image_urls", {}).get("image_url", []), "賣家信息": { "賣家ID": item_data.get("seller_info", {}).get("user_id"), "店鋪名稱": item_data.get("seller_info", {}).get("shop_name") }, "SKU信息": item_data.get("sku_info", {}).get("sku", []), # 多SKU規(guī)格 "商品規(guī)格": item_data.get("spec_info", {}).get("spec", []), "商品描述": item_data.get("description") # 商品詳情頁富文本 } return parsed_data # 測試調(diào)用 if __name__ == "__main__": # 替換為你要查詢的1688商品ID(從商品鏈接中提取) test_offer_id = "699988776655" item_detail = get_1688_item_detail(test_offer_id) if item_detail: print("=== 1688商品詳情解析結(jié)果 ===") print(json.dumps(item_detail, ensure_ascii=False, indent=2)) else: print("商品詳情獲取失敗")
2. 環(huán)境配置(.env 文件)
在代碼同級目錄創(chuàng)建.env文件,寫入你的憑證:
env
1688_APP_KEY=你的AppKey 1688_APP_SECRET=你的AppSecret
三、關(guān)鍵步驟詳解
1. 簽名生成(核心防錯(cuò)點(diǎn))
1688 API 的簽名是調(diào)用成功的關(guān)鍵,錯(cuò)誤會直接返回invalid signature:
排序規(guī)則:嚴(yán)格按參數(shù)名 ASCII 碼升序(如app_key在method前,timestamp在v前);
加密規(guī)則:拼接后字符串需UTF-8編碼,MD5 加密后轉(zhuǎn)大寫;
注意:空值參數(shù)不參與簽名(如fields不傳則不加入)。
2. 數(shù)據(jù)解析技巧
1688 返回的商品數(shù)據(jù)字段多且嵌套深,重點(diǎn)關(guān)注:
價(jià)格 / 庫存:SKU 級的價(jià)格和庫存需從sku_info.sku中解析(每個(gè) SKU 對應(yīng)不同規(guī)格和價(jià)格);
圖片鏈接:image_urls.image_url是列表,包含主圖和詳情圖;
富文本描述:description是 HTML 格式,如需提取純文本,可使用BeautifulSoup清理:
python
運(yùn)行
from bs4 import BeautifulSoup # 清理商品描述中的HTML標(biāo)簽 if parsed_data["商品描述"]: soup = BeautifulSoup(parsed_data["商品描述"], "html.parser") parsed_data["商品描述_純文本"] = soup.get_text(strip=True)
3. 常見錯(cuò)誤與解決
表格
| 錯(cuò)誤碼 / 提示 | 原因 | 解決方法 |
|---|---|---|
| invalid signature | 簽名錯(cuò)誤 | 檢查參數(shù)排序、AppSecret 是否正確、時(shí)間戳格式 |
| insufficient permissions | 權(quán)限不足 | 確認(rèn)應(yīng)用已申請alibaba.item.get接口權(quán)限 |
| offer_id invalid | 商品 ID 錯(cuò)誤 | 檢查商品 ID 是否為數(shù)字,或商品是否存在 |
| request frequency limit | 調(diào)用頻率超限 | 添加延時(shí)(如time.sleep(1)),控制調(diào)用頻率 |
四、進(jìn)階優(yōu)化
1. 批量調(diào)用(多商品 ID)
python
運(yùn)行
def batch_get_item_detail(offer_id_list):
"""批量獲取商品詳情,避免頻率超限"""
result_list = []
for offer_id in offer_id_list:
detail = get_1688_item_detail(offer_id)
if detail:
result_list.append(detail)
time.sleep(1) # 每次調(diào)用間隔1秒,避免限流
return result_list
# 測試批量調(diào)用
offer_ids = ["699988776655", "700011223344"]
batch_result = batch_get_item_detail(offer_ids)
print(f"批量獲取{len(batch_result)}個(gè)商品詳情")
2. 數(shù)據(jù)持久化(保存到 JSON/Excel)
python
運(yùn)行
import pandas as pd
# 保存到JSON文件
with open("1688_item_detail.json", "w", encoding="utf-8") as f:
json.dump(item_detail, f, ensure_ascii=False, indent=2)
# 保存到Excel(批量數(shù)據(jù)更適用)
df = pd.DataFrame(batch_result)
df.to_excel("1688_item_batch.xlsx", index=False, encoding="utf-8")
總結(jié)
1688 商品詳情 API 調(diào)用的核心是正確生成簽名,需嚴(yán)格遵循 ASCII 升序 + MD5 加密規(guī)則;
數(shù)據(jù)解析需聚焦業(yè)務(wù)字段(標(biāo)題、價(jià)格、SKU、賣家信息),過濾冗余嵌套數(shù)據(jù);
生產(chǎn)環(huán)境需添加頻率控制和異常重試(如失敗后重試 2 次),避免接口調(diào)用失敗影響業(yè)務(wù)。
審核編輯 黃宇
-
API
+關(guān)注
關(guān)注
2文章
2368瀏覽量
66757 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90025
發(fā)布評論請先 登錄
實(shí)戰(zhàn)指南:調(diào)用沃爾瑪平臺 API 高效獲取商品詳情數(shù)據(jù)
調(diào)用DMM平臺API獲取商品詳情數(shù)據(jù)的技術(shù)實(shí)踐
調(diào)用野莓平臺商品詳情API接口實(shí)踐
調(diào)用樂天平臺API獲取商品詳情數(shù)據(jù)
調(diào)用1688開放平臺商品分類API獲取分類數(shù)據(jù)
1688商品列表API接口快速上手指南
1688店鋪所有商品API使用指南
1688店鋪詳情API使用指南
1688商品快遞費(fèi)用API開發(fā)指南
1688商品詳情API指南
1688商品詳情API完整指南
如何通過API獲取1688平臺商品詳情
淘寶商品詳情API接口技術(shù)解析與實(shí)戰(zhàn)應(yīng)用
閑魚平臺獲取商品詳情API接口
1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)
評論