一、官方 API 实战(企业级合规方案)
1. 接入准备(企业认证是前提)
- 注册并认证:访问1688 开放平台,完成企业开发者认证(需营业执照、法人身份证、对公账户),审核 1-3 个工作日。
- 创建应用与获取凭证:控制台→应用管理→创建应用,获取 AppKey、AppSecret;申请接口权限(如
alibaba.item.get商品详情、alibaba.trade.product.search4trade店铺商品搜索)。 - 技术依赖:Python 3.6+,安装
requests、urllib3、hashlib等库。
2. 核心签名机制(API 调用必备)
1688 API 采用 MD5 签名验证,步骤如下:
- 按 ASCII 升序排列所有请求参数(排除 sign)。
- 拼接为
key1value1&key2value2格式,末尾追加 AppSecret。 - MD5 加密并转为大写,得到 sign 值。示例代码(Python):
python
运行
import hashlib, urllib.parse
def generate_sign(params, app_secret):
sorted_params = sorted(params.items())
sign_str = '&'.join([f'{k}{v}' for k, v in sorted_params if k != 'sign']) + app_secret
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
3. 商品详情接口调用示例(alibaba.item.get)
完整请求流程(含分页与重试):
python
运行
import requests, time
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
API_URL = "https://gw.open.1688.com/openapi/param2/2.0/com.alibaba.product/alibaba.item.get"
def fetch_product_detail(product_id):
params = {
"app_key": APP_KEY,
"method": "alibaba.item.get",
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"v": "2.0",
"productId": product_id,
"fields": "productId,title,price,stock,picUrl"
}
params["sign"] = generate_sign(params, APP_SECRET)
try:
resp = requests.get(API_URL, params=params, timeout=10)
return resp.json()
except Exception as e:
print(f"Error: {e}")
return None
# 调用示例
product_data = fetch_product_detail("123456789")
print(product_data)
4. 常见接口与应用场景
| 接口 | 功能 | 适用场景 |
|---|---|---|
alibaba.item.get |
商品详情查询 | 单品数据采集、库存核对 |
alibaba.trade.product.search4trade |
店铺商品搜索 | 店铺全量商品采集、选品分析 |
alibaba.agent.price.get |
分销 / 代发价查询 | 一件代发定价、利润核算 |
5. 最佳实践
- 字段按需筛选:用
fields参数指定所需字段(如 title,price,stock),减少传输量。 - 限流与重试:接口有 QPS 限制,建议单账号≤5 次 / 秒,失败自动重试(最多 3 次)。
- 数据去重:以 productId 为唯一键,避免重复存储。
二、网页爬虫实战(无 API 权限时的备选)
1. 技术选型与环境搭建
- 核心库:
requests(请求)、BeautifulSoup4(解析)、Selenium/Playwright(动态渲染)、fake_useragent(随机 UA)、proxymanager(IP 代理)。 - 安装命令:
bash
运行
pip install requests beautifulsoup4 selenium playwright fake_useragent pandas
playwright install chromium # 安装浏览器驱动
2. 反爬应对核心策略
| 反爬手段 | 应对方法 |
|---|---|
| 固定 UA/IP | 随机 User-Agent + 代理 IP 池(付费代理更稳定) |
| 高频请求 | 随机延迟(2-5 秒)+ 按时间段限流 |
| 动态渲染 | Playwright 模拟浏览器加载 JS |
| Cookie 验证 | 登录态 Cookie 池或扫码登录 |
3. 商品列表爬虫示例(requests+BeautifulSoup)
抓取 1688 搜索页商品(关键词 "手机壳"):
python
运行
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests, time
def search_1688(keyword, page=1):
ua = UserAgent()
headers = {"User-Agent": ua.random}
url = f"https://s.1688.com/selloffer/offer_search.htm?keywords={urllib.parse.quote(keyword)}&page={page}"
try:
resp = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(resp.text, "lxml")
products = soup.select(".sm-offer-item")
result = []
for item in products:
title = item.select_one(".offer-title").get("title")
price = item.select_one(".price").text.strip()
result.append({"title": title, "price": price})
time.sleep(3) # 防反爬延迟
return result
except Exception as e:
print(f"Error: {e}")
return []
# 调用示例
search_result = search_1688("手机壳", page=1)
print(search_result)
4. 动态页面爬取(Playwright)
针对 JS 渲染的商品详情页(如销量、SKU 库存):
python
运行
from playwright.sync_api import sync_playwright
def fetch_product_detail_dynamic(product_url):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...")
page.goto(product_url, timeout=30000)
title = page.locator(".detail-title").inner_text()
price = page.locator(".price").inner_text()
browser.close()
return {"title": title, "price": price}
5. 合规与风险提示
- 遵守
robots.txt协议,不爬取禁止字段(如用户隐私、敏感数据)。 - 网页结构频繁变更,需定期维护解析规则。
- 大规模爬虫易触发 IP 封禁,建议小规模测试后再扩容。
三、两种方案对比与选择建议
| 维度 | 官方 API | 网页爬虫 |
|---|---|---|
| 合法性 | 官方认可,完全合规 | 存在法律与合规风险 |
| 数据质量 | 结构化、字段完整 | 需自行解析,易缺失 / 出错 |
| 稳定性 | 高,SLA 保障 | 低,页面变更 / 反爬导致中断 |
| 成本 | 企业认证 + 部分接口收费 | 开发维护成本高,代理 IP 费用 |
| 适用场景 | 企业级批量采集、长期运营 | 临时小规模采集、无 API 权限 |