在电商领域,通过关键词搜索商品是常见的需求。无论是淘宝、京东还是 1688 等平台,都提供了相应的 API 接口,允许开发者根据关键词搜索商品,并获取商品列表。本文将详细介绍如何使用 Python 调用这些接口,并解析返回的数据。
一、准备工作
(一)注册开发者账号
在使用电商平台的 API 之前,需要在对应的开放平台注册成为开发者。例如,淘宝开放平台、京东开放平台等。注册过程中,你需要提供一些基本信息,如联系方式、公司名称等。
(二)创建应用并获取 API 密钥
登录开发者账号后,创建一个新的应用,并为其申请调用商品搜索接口的权限。在申请时,你需要提供关于你的应用的详细信息,包括应用名称、应用描述、使用场景等。申请通过后,你将获得 App Key 和 App Secret,这两个凭证后续会用于身份验证。
(三)安装必要的 Python 库
在开始编写代码之前,确保你的开发环境已安装以下库:
- requests:用于发送 HTTP 请求。
- json:用于解析 JSON 数据。
- 如果还未安装,可以通过以下命令安装:
pip install requests
二、接口调用实战
(一)淘宝商品搜索接口调用
以下是基于 Python 的淘宝商品搜索接口调用实现,包含签名生成、请求发送及数据解析功能。
Python
import time
import hashlib
import requests
class TaobaoItemSearch:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.api_url = "https://eco.taobao.com/router/rest"
self.session = requests.Session()
self.session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=50))
def generate_sign(self, params):
sorted_params = sorted(params.items())
param_str = ''.join([f"{k}{v}" for k, v in sorted_params])
sign = hashlib.md5((self.app_secret + param_str + self.app_secret).encode()).hexdigest().upper()
return sign
def search_items(self, keyword, page=1, page_size=20, sort='sale-desc'):
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
params = {
"app_key": self.app_key,
"method": "taobao.items.search",
"v": "2.0",
"timestamp": timestamp,
"format": "json",
"sign_method": "md5",
"q": keyword,
"page": page,
"page_size": page_size,
"sort": sort,
"fields": "num_iid,title,pict_url,price,nick,seller_id"
}
params["sign"] = self.generate_sign(params)
response = self.session.get(self.api_url, params=params)
if response.status_code == 200:
return response.json()
return None
# 使用示例
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
searcher = TaobaoItemSearch(app_key, app_secret)
result = searcher.search_items("女装")
if result:
items = result.get("items_search_response", {}).get("items", {}).get("item", [])
for item in items:
print(f"商品标题: {item['title']}")
print(f"价格: {item['price']}")
print(f"图片链接: {item['pict_url']}")
(二)京东商品搜索接口调用
以下是基于 Python 的京东商品搜索接口调用实现:
import hashlib
import time
import requests
def generate_sign(params, app_secret):
sorted_params = sorted(params.items())
param_str = ''.join([f"{k}{v}" for k, v in sorted_params])
sign = hashlib.md5((app_secret + param_str + app_secret).encode()).hexdigest().upper()
return sign
def search_jd_items(app_key, app_secret, keyword, page=1, page_size=20):
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
params = {
"method": "JD.item_search",
"app_key": app_key,
"timestamp": timestamp,
"v": "1.0",
"sign_method": "md5",
"keyword": keyword,
"pageIndex": page,
"pageSize": page_size,
"fields": "skuId,title,price,imageUrl"
}
params["sign"] = generate_sign(params, app_secret)
response = requests.get("https://api.jd.com/routerjson", params=params)
if response.status_code == 200:
return response.json()
return None
# 使用示例
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
result = search_jd_items(app_key, app_secret, "手机")
if result:
items = result.get("item_search_response", {}).get("items", [])
for item in items:
print(f"商品标题: {item['title']}")
print(f"价格: {item['price']}")
print(f"图片链接: {item['imageUrl']}")
(三)1688 商品搜索接口调用
以下是基于 Python 的 1688 商品搜索接口调用实现:
import requests
import hashlib
import time
def generate_sign(params, app_secret):
sorted_params = sorted(params.items())
param_str = ''.join([f"{k}{v}" for k, v in sorted_params])
sign = hashlib.md5((app_secret + param_str + app_secret).encode()).hexdigest().upper()
return sign
def search_1688_items(app_key, app_secret, keyword, page=1, page_size=20):
params = {
"app_key": app_key,
"method": "com.alibaba.product.search",
"v": "1.0",
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"keyword": keyword,
"page_no": page,
"page_size": page_size,
"fields": "productId,title,priceRange,moq,stock,imageUrls"
}
params["sign"] = generate_sign(params, app_secret)
response = requests.get("https://gw.open.1688.com/openapi/param2/1/com.alibaba.product.search/", params=params)
if response.status_code == 200:
return response.json()
return None
# 使用示例
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
result = search_1688_items(app_key, app_secret, "运动鞋")
if result:
items = result.get("result", {}).get("products", [])
for item in items:
print(f"商品标题: {item['title']}")
print(f"价格范围: {item['priceRange']}")
print(f"起订量: {item['moq']}")
print(f"库存: {item['stock']}")
三、注意事项
(一)频率限制
电商平台对 API 的调用频率有限制,通常为每秒 1-2 次。在开发中需合理控制请求频率,避免被限流。
(二)数据安全
确保在处理敏感信息时遵守相关隐私和安全法规。
(三)错误处理
在实际应用中,要对可能出现的错误进行捕获和处理,如网络请求异常、数据解析错误等。
(四)数据合规
禁止存储用户隐私数据(如手机号、地址),不得直接展示商品价格,需通过电商平台的链接跳转。
四、总结
通过以上步骤,你可以使用 Python 编写程序高效地获取并处理电商平台的关键词搜索结果数据。希望本文能为开发者提供有价值的参考,帮助他们更好地利用电商平台的 API 接口获取数据。
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。