在电商数据驱动决策的时代,1688作为国内最大的B2B批发平台,其开放的API接口为商家提供了高效获取商品数据的通道。本文将以 Python语言为例,详解如何通过官方接口实现店铺所有商品的自动化抓取。(综合参考)
alibaba.trade.product.search4trade接口(或
1688.item_search_shop),开发者可获取指定店铺的商品列表数据,涵盖商品ID、标题、主图、价格、库存、销量等核心字段,支持分页查询以覆盖全量商品。App Key和
App Secret。
关键参数包括:
•
method:接口方法名(如
alibaba.trade.product.search4trade)
•
seller_member_id:目标店铺ID(可通过商家后台或公开页面获取)
•
page_no/
page_size:分页参数(建议每页50-100条以平衡效率与稳定性)
•
fields:指定返回字段(如
product_id,title,price,pic_url)
params = {
"method": "alibaba.trade.product.search4trade",
"app_key": "your_app_key",
"seller_member_id": "123456789",
"page_no": 1,
"page_size": 50,
"timestamp": int(time.time()),
"v": "2.0",
"format": "json"
}1688 API采用 MD5加密签名验证请求合法性,核心步骤:
sign外的参数按字母升序排列App Secretdef generate_sign(params, secret):
params_sorted = sorted(params.items())
sign_str = "&".join([f"{k}{v}" for k,v in params_sorted if k != "sign"])
sign = hashlib.md5((sign_str + secret).encode('utf-8')).hexdigest().upper()
return sign
params['sign'] = generate_sign(params, APP_SECRET)由于单次请求最多返回100条数据,需通过循环翻页直至无新数据返回:
def fetch_all_products(max_retries=3): page_no = 1 all_products = [] while True: try: products = request_api(page_no) if not products: break all_products.extend(products) page_no += 1 except Exception as e: if max_retries <= 0: raise max_retries -= 1 time.sleep(5) return all_products
result.product_list.product数组中。需特别关注字段:
product_id:商品唯一标识(用于详情接口二次调用)
price_range:价格区间(批发场景常见)
moq:最小起订量update_time字段实现增量更新,降低API调用压力time.sleep(0.2)避免触发限流。total_results与实际条目数)
import requests
import hashlib
import time
APP_KEY = "YOUR_APP_KEY"
APP_SECRET = "YOUR_APP_SECRET"
SHOP_ID = "TARGET_SHOP_ID"
def generate_sign(params, secret):
# 签名生成函数(同上)
def get_products(page):
url = "https://eco.1688.com/router/rest"
params = {
"method": "alibaba.trade.product.search4trade",
"app_key": APP_KEY,
"seller_member_id": SHOP_ID,
"page_no": page,
"page_size": 50,
"timestamp": int(time.time()),
"v": "2.0",
"format": "json"
}
params["sign"] = generate_sign(params, APP_SECRET)
try:
resp = requests.get(url, params=params, timeout=10)
if resp.status_code == 200:
data = resp.json()
if data.get("code") == "200":
return data["result"]["product_list"]["product"]
return None
except Exception as e:
print(f"Page {page} failed: {str(e)}")
return None
# 调用示例
all_products = []
current_page = 1
while True:
products = get_products(current_page)
if not products: break
all_products.extend(products)
current_page += 1
time.sleep(0.5) # 控制请求频率
print(f"Total products fetched: {len(all_products)}")• 官方文档:1688开放平台
• 高级应用:商品详情批量抓取(需结合
alibaba.product.detail.get接口)
• 性能优化:多线程异步请求(注意遵守QPS限制)
通过系统化接口对接,开发者可构建自动化数据管道,为库存管理、价格策略制定等场景提供实时数据支撑。建议开发过程中密切关注意官方API变更公告,确保服务稳定性。 如遇任何疑问或有进一步的需求,请随时与我私信或者评论 联系 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026910/viewspace-3074894/ ,如需转载,请注明出处,否则将追究法律责任。