在电商领域,1688 作为国内领先的 B2B 电商平台,拥有海量的商品信息。这些数据对于企业采购决策、市场分析、价格监控和供应链管理具有重要价值。本文将详细介绍如何使用 Python 爬虫技术,通过 1688 的商品详情接口(item_search
和 aliexpress.product.detail.get
)获取商品数据。
一、准备工作
(一)注册 1688 开放平台账号
要使用 1688 的 API 接口,首先需要在1688平台注册一个开发者账号,并创建应用以获取 App Key
和 App Secret
。这些凭证是调用 API 接口时进行身份验证的必要条件。
(二)安装必要的 Python 库
为了实现爬虫功能,需要安装以下 Python 库:
Requests:用于发送 HTTP 请求。
Pandas:用于数据处理和存储。
可以通过以下命令安装这些库:
bash
pip install requests pandas
(三)获取 Access Token
大多数 API 接口需要通过 Access Token
进行身份验证。这通常需要通过 OAuth2.0 授权流程获取,涉及到 App Key
和 App Secret
的交换。
以下是一个获取 Access Token
的示例代码:
Python
import requests
import hashlib
import time
def get_access_token(app_key, app_secret):
url = "https://open.1688.com/openapi/oauth2/token"
data = {
"grant_type": "client_credentials",
"client_id": app_key,
"client_secret": app_secret
}
response = requests.post(url, data=data)
if response.status_code == 200:
return response.json().get("access_token")
else:
print("获取 Access Token 失败,状态码:", response.status_code)
return None
二、调用商品详情接口
(一)通过关键词搜索商品列表
1688 提供了 item_search
接口,可以通过关键词搜索商品列表。以下是一个调用该接口的示例代码:
Python
def search_items_by_keyword(keyword, access_token, app_key):
url = "https://gw.open.1688.com/openapi/param2/2/portals.open/api/"
params = {
"app_key": app_key,
"method": "item_search",
"keyword": keyword,
"page": 1,
"page_size": 10,
"timestamp": str(int(time.time() * 1000)),
"format": "json",
"v": "2.0"
}
params["sign"] = generate_sign(params, app_secret) # 生成签名
headers = {
"Authorization": f"Bearer {access_token}"
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()
else:
print("请求失败,状态码:", response.status_code)
return None
(二)获取商品详情
通过 aliexpress.product.detail.get
接口,可以获取商品的详细信息。以下是一个调用该接口的示例代码:
Python
def get_product_detail(product_id, access_token, app_key, app_secret):
url = "https://gw.open.1688.com/openapi/param2/2/portals.open/api/"
params = {
"app_key": app_key,
"method": "aliexpress.product.detail.get",
"product_id": product_id,
"timestamp": str(int(time.time() * 1000)),
"format": "json",
"v": "2.0"
}
params["sign"] = generate_sign(params, app_secret) # 生成签名
headers = {
"Authorization": f"Bearer {access_token}"
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()
else:
print("请求失败,状态码:", response.status_code)
return None
(三)签名生成函数
1688 的接口需要对请求参数进行签名验证。以下是一个生成签名的示例代码:
Python
def 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
三、解析和存储数据
(一)解析商品列表数据
获取到的商品列表数据是 JSON 格式,可以通过以下代码解析并提取关键信息:
Python
def parse_item_list(data):
items = data.get("items", [])
parsed_items = []
for item in items:
item_id = item.get("item_id")
title = item.get("title")
price = item.get("price")
image = item.get("image")
sales = item.get("sales")
parsed_items.append({
"商品ID": item_id,
"商品名称": title,
"价格": price,
"图片": image,
"销量": sales
})
return parsed_items
(二)解析商品详情数据
获取到的商品详情数据也是 JSON 格式,可以通过以下代码解析并提取关键信息:
Python
def parse_product_detail(data):
product_info = data.get("result", {}).get("productInfo", {})
sku_list = product_info.get("skuList", [])
parsed_data = {
"商品标题": product_info.get("subject"),
"批发价格区间": product_info.get("priceRange"),
"最小起订量": product_info.get("moq"),
"SKU详情": []
}
for sku in sku_list:
parsed_data["SKU详情"].append({
"规格": sku.get("spec"),
"库存": sku.get("stock"),
"价格": sku.get("price")
})
return parsed_data
(三)存储数据到 CSV 文件
解析后的数据可以存储到 CSV 文件中,方便后续分析:
Python
import pandas as pd
def save_to_csv(data, filename):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding="utf-8-sig")
print(f"数据已保存到 {filename}")
四、完整流程示例
以下是一个完整的流程示例,展示如何搜索商品列表并获取商品详情:
Python
# 示例:搜索关键词为 "电子产品" 的商品列表
keyword = "电子产品"
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
access_token = get_access_token(app_key, app_secret)
if access_token:
item_list_data = search_items_by_keyword(keyword, access_token, app_key)
if item_list_data:
parsed_items = parse_item_list(item_list_data)
save_to_csv(parsed_items, "item_list.csv")
# 获取第一个商品的详情
if parsed_items:
product_id = parsed_items[0]["商品ID"]
product_detail_data = get_product_detail(product_id, access_token, app_key, app_secret)
if product_detail_data:
parsed_detail = parse_product_detail(product_detail_data)
print("商品详情:", parsed_detail)
五、注意事项
(一)遵守法律法规
在爬取数据时,必须遵守相关法律法规,尊重网站的 robots.txt
文件规定。
(二)合理设置请求频率
避免过高的请求频率导致对方服务器压力过大,甚至被封禁 IP。
(三)数据存储
获取的数据应合理存储,避免数据泄露。
(四)签名验证
1688 的接口需要对请求参数进行签名验证,确保签名的正确性。
六、总结
通过本文的介绍,你已经学会了如何使用 Python 爬虫技术,通过 1688 的商品详情接口获取商品数据。这不仅可以帮助你自动化获取商品信息,还可以为你的数据分析和电商运营提供支持。希望这篇文章能帮助你在电商数据获取的道路上更进一步。
如果你对 Python 爬虫技术感兴趣,可以继续深入学习相关的知识和技能,如动态网页爬取或分布式爬虫。同时,也可以关注 1688 开放平台的其他接口,以获取更多有价值的数据。
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。