前言 中国制造网作为
B2B
外贸采购平台,关键词搜索接口和普通电商平台存在明显差异。接口返回数据混杂工厂、贸易商、中间商多种类型商家商品,同时存在分页偏移漂移、部分字段缺失、多语言字段混用等问题。网上多数示例只简单演示请求调用,缺少业务侧过滤逻辑。本文侧重工程落地,增加商家类型过滤、分页边界校验、结果数据清洗,给出可直接用于业务系统的调用示例。 前置准备 对接前需要在平台开发者后台创建应用,获取 搜索接口入参核心:关键词、页码、每页条数、筛选条件;返回包含商品 ID、标题、价格、起订量、供应商信息、产地等字段。原始返回字段冗余,大量字段业务不需要,需要做裁剪处理。 核心 Python 代码示例 python 代码逻辑解读 封装请求类统一管理签名、会话、限流休眠,避免重复代码;签名按照平台规则对参数排序后 MD5 加密。 增加 做数据裁剪,剔除大量无用返回字段,只保留业务核心字段,降低内存占用。 增加超时、错误码判断,简单休眠控制 QPS,防止短时间高频调用被限制。 线上踩坑总结 分页漂移:平台搜索结果会实时变化,翻页时会出现重复商品,业务层需要用 goods_id 做去重,不能单纯依赖分页。 价格字段为空:部分商品不公开报价,price_range 会返回 null,业务代码要做空值判断,直接取值会抛出异常。 供应商类型字段不稳定:部分老商品供应商类型字段缺失,需要做好兜底。 令牌过期:access_token 具备有效期,生产环境需要增加自动刷新逻辑,示例中未展示。app_key、app_secret,接口调用需要生成签名,同时获取访问令牌 access_token。接口有调用频次限制,B2B 平台对 QPS 管控严格,生产环境必须增加休眠限流,避免触发接口封禁。
import requests
import time
import hashlib
class MadeInChinaSearchClient:
def __init__(self, app_key, app_secret, access_token):
self.app_key = app_key
self.app_secret = app_secret
self.access_token = access_token
self.base_url = "https://api.made‑in‑china.com/openapi/search/goods"
self.session = requests.Session()
def gen_sign(self, params):
sort_str = "".join([f"{k}{v}" for k, v in sorted(params.items())])
sign_raw = self.app_secret + sort_str + self.app_secret
return hashlib.md5(sign_raw.encode("utf‑8")).hexdigest().upper()
def search_goods(self, keyword, page=1, page_size=20, factory_filter=True):
params = {
"app_key": self.app_key,
"access_token": self.access_token,
"keyword": keyword,
"page": page,
"page_size": page_size,
"timestamp": int(time.time())
}
params["sign"] = self.gen_sign(params)
resp = self.session.get(self.base_url, params=params, timeout=15)
res_json = resp.json()
if res_json.get("code") != 0:
return {"error": res_json.get("msg"), "data": []}
raw_list = res_json.get("data", {}).get("goods_list", [])
result = []
for item in raw_list:
# B2B业务过滤:只保留工厂类型供应商
supplier_type = item.get("supplier_type", "")
if factory_filter and supplier_type != "factory":
continue
clean_item = {
"goods_id": item.get("goods_id"),
"title": item.get("title"),
"price": item.get("price_range"),
"moq": item.get("min_order"),
"supplier_name": item.get("supplier_name"),
"supplier_type": supplier_type
}
result.append(clean_item)
time.sleep(0.8)
return {"error": None, "data": result}
if __name__ == "__main__":
client = MadeInChinaSearchClient("your_key", "your_secret", "your_token")
ret = client.search_goods("usb charger", page=1, factory_filter=True)
print(ret["data"])factory_filter开关,B2B 场景经常只需要工厂货源,过滤贸易商数据,减少后续业务处理压力。