速卖通商品详情接口深度解析:从多语言数据剥离到跨境合规风控
速卖通(AliExpress)作为全球知名的跨境电商平台,其商品详情接口不仅包含多语言、多货币的复杂数据结构,还嵌入了严格的反爬机制和跨境合规校验逻辑。本文将突破传统的单接口数据抓取思路,通过解析接口的多语言数据组织方式,结合跨境合规风控规则,实现商品详情的深度采集与结构化处理,并提供完整的 Python 代码实现。
一、接口核心机制与数据结构分析
速卖通商品详情接口采用 RESTful 架构,核心数据通过以下两个接口协同返回:
基础信息接口
https://aliexpress.com/api/item_detail.htm
作用:返回商品标题、价格、主图、销量等核心信息。
关键参数:itemId(商品 ID)、language(语言编码,如en、ru)、currency(货币编码,如USD、EUR)。
详情内容接口
https://aliexpress.com/api/get_desc_module
作用:返回商品详情页的 HTML 内容、规格参数、售后政策等。
关键参数:itemId、descVersion(详情版本号,从基础信息接口获取)。
核心突破点:
多语言数据:接口通过language参数返回对应语言的商品信息,需动态切换语言编码以获取全量数据。
跨境合规校验:接口返回数据包含restriction字段,标注商品的出口限制、禁运国家等合规信息,需特殊处理。
反爬机制:接口对请求头的User-Agent、Referer和cookie进行严格校验,且descVersion参数随商品更新而变化。
二、创新技术方案
1. 多语言数据采集器
自动切换语言编码,采集不同语种的商品信息,并进行结构化存储:
python
运行
import requests
import json
import time
from typing import Dict, List
class AliExpressMultiLangScraper:
def __init__(self, item_id: str):
self.item_id = item_id
self.session = requests.Session()
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": f"https://aliexpress.com/item/{item_id}.html",
"Accept-Language": "en-US,en;q=0.9",
"cookie": "ali_apache_id=xxx; xman_us_f=xxx" # 从浏览器复制有效cookie
})
self.languages = ["en", "ru", "es", "fr", "de"] # 目标语言编码
self.currencies = ["USD", "EUR", "RUB", "GBP"] # 目标货币编码
def _fetch_base_info(self, lang: str, currency: str) -> Dict:
"""获取指定语言和货币的商品基础信息"""
url = "https://aliexpress.com/api/item_detail.htm"
params = {
"itemId": self.item_id,
"language": lang,
"currency": currency,
"cache": int(time.time())
}
response = self.session.get(url, params=params)
return response.json()
def scrape_multi_lang_data(self) -> List[Dict]:
"""采集多语言商品数据"""
multi_lang_data = []
for lang in self.languages:
for currency in self.currencies:
try:
base_info = self._fetch_base_info(lang, currency)
if base_info.get("code") != 200:
continue
data = base_info.get("data", {})
# 提取核心字段
structured_data = {
"item_id": self.item_id,
"language": lang,
"currency": currency,
"title": data.get("title", ""),
"price": data.get("price", {}).get("currentPrice", 0),
"original_price": data.get("price", {}).get("originalPrice", 0),
"sales": data.get("trade", {}).get("salesCount", 0),
"rating": data.get("feedback", {}).get("averageStar", 0),
"desc_version": data.get("descModule", {}).get("descVersion", "")
}
multi_lang_data.append(structured_data)
time.sleep(1) # 控制请求频率
except Exception as e:
print(f"采集语言{lang}货币{currency}失败:{str(e)}")
return multi_lang_data
2. 详情内容解析器
从详情内容接口返回的 HTML 中提取规格参数、售后政策,并解析跨境合规信息:
python
运行
from lxml import etree
import re
class AliExpressDetailParser:
def __init__(self, item_id: str, session: requests.Session):
self.item_id = item_id
self.session = session
def fetch_detail_html(self, desc_version: str) -> str:
"""获取商品详情HTML"""
url = "https://aliexpress.com/api/get_desc_module"
params = {
"itemId": self.item_id,
"descVersion": desc_version,
"cache": int(time.time())
}
response = self.session.get(url, params=params)
data = response.json()
return data.get("data", {}).get("html", "")
def parse_compliance_info(self, base_info: Dict) -> Dict:
"""解析跨境合规信息"""
compliance = base_info.get("data", {}).get("restriction", {})
return {
"forbidden_countries": compliance.get("forbiddenCountries", []),
"export_restriction": compliance.get("exportRestriction", False),
"product_certifications": compliance.get("certifications", [])
}
def parse_spec_params(self, html: str) -> List[Dict]:
"""解析规格参数"""
tree = etree.HTML(html)
spec_params = []
# 规格参数通常在 class="spec-params" 的容器中
param_items = tree.xpath('//div[contains(@class, "spec-params")]//li')
for item in param_items:
key = item.xpath('./span[1]/text()')
value = item.xpath('./span[2]/text()')
if key and value:
spec_params.append({
"key": key[0].strip(),
"value": value[0].strip()
})
return spec_params
def parse_after_sale(self, html: str) -> Dict:
"""解析售后政策"""
tree = etree.HTML(html)
after_sale = {}
# 售后政策通常在 class="after-sale" 的容器中
after_sale_text = tree.xpath('//div[contains(@class, "after-sale")]/text()')
if after_sale_text:
text = "".join(after_sale_text).strip()
after_sale["refund_policy"] = "30-day refund" if "30-day refund" in text else ""
after_sale["warranty"] = "1-year warranty" if "1-year warranty" in text else ""
return after_sale
3. 跨境合规风控过滤器
根据采集到的合规信息,过滤出存在出口限制或禁运风险的商品,并生成风控报告:
python
运行
class CrossBorderRiskFilter:
def __init__(self, forbidden_countries: List[str] = None):
self.forbidden_countries = forbidden_countries or ["US", "UK", "EU"] # 目标禁运国家/地区
def filter_risky_products(self, product_data: Dict) -> Dict:
"""过滤风险商品并生成报告"""
compliance = product_data.get("compliance_info", {})
risk_report = {
"risk_level": "low",
"risk_reasons": []
}
# 检查禁运国家
if any(country in self.forbidden_countries for country in compliance.get("forbidden_countries", [])):
risk_report["risk_level"] = "high"
risk_report["risk_reasons"].append("商品被禁运至目标国家/地区")
# 检查出口限制
if compliance.get("export_restriction"):
risk_report["risk_level"] = "medium"
risk_report["risk_reasons"].append("商品存在出口限制")
# 检查认证缺失
required_certs = ["CE", "RoHS"] # 必需认证
product_certs = compliance.get("product_certifications", [])
missing_certs = [cert for cert in required_certs if cert not in product_certs]
if missing_certs:
risk_report["risk_level"] = "medium"
risk_report["risk_reasons"].append(f"缺失必需认证:{', '.join(missing_certs)}")
return {**product_data, "risk_report": risk_report}
三、完整调用流程与实战效果
python
运行
def main():
item_id = "100500585858585" # 目标商品ID
# 初始化多语言采集器
lang_scraper = AliExpressMultiLangScraper(item_id)
multi_lang_data = lang_scraper.scrape_multi_lang_data()
# 初始化详情解析器
detail_parser = AliExpressDetailParser(item_id, lang_scraper.session)
# 初始化合规风控过滤器
risk_filter = CrossBorderRiskFilter(forbidden_countries=["US", "EU"])
# 处理每个语言版本的商品数据
for data in multi_lang_data:
# 获取详情HTML
desc_version = data.get("desc_version", "")
if not desc_version:
continue
detail_html = detail_parser.fetch_detail_html(desc_version)
# 解析合规信息、规格参数和售后政策
base_info = lang_scraper._fetch_base_info(data["language"], data["currency"])
compliance_info = detail_parser.parse_compliance_info(base_info)
spec_params = detail_parser.parse_spec_params(detail_html)
after_sale = detail_parser.parse_after_sale(detail_html)
# 整合数据
product_data = {
**data,
"compliance_info": compliance_info,
"spec_params": spec_params,
"after_sale": after_sale
}
# 合规风控过滤
filtered_data = risk_filter.filter_risky_products(product_data)
# 打印结果
print(f"商品ID:{filtered_data['item_id']}")
print(f"语言:{filtered_data['language']}")
print(f"标题:{filtered_data['title']}")
print(f"价格:{filtered_data['price']} {filtered_data['currency']}")
print(f"销量:{filtered_data['sales']}件")
print(f"风险等级:{filtered_data['risk_report']['risk_level']}")
if filtered_data['risk_report']['risk_reasons']:
print(f"风险原因:{', '.join(filtered_data['risk_report']['risk_reasons'])}")
print("-" * 50)
if __name__ == "__main__":
main()
实战效果亮点:
多语言全覆盖:支持采集英、俄、西、法、德等多语言商品信息,满足跨境电商多市场运营需求。
合规风险预警:通过风控过滤器自动识别禁运商品、出口限制和认证缺失风险,降低跨境贸易合规风险。
结构化数据输出:规格参数、售后政策等非结构化数据被解析为标准字典格式,可直接用于商品上架、数据分析等场景。
四、方案优势与注意事项
核心优势
多语言采集能力:动态切换语言编码,突破单语言采集限制,适配速卖通全球多语言市场。
跨境合规风控:整合合规信息解析与风险过滤,帮助开发者快速识别高风险商品,避免贸易纠纷。
反爬适应性:模拟真实浏览器请求头和cookie,结合合理的请求频率控制,提升接口调用成功率。
注意事项
Cookie 有效性:cookie需定期从浏览器更新,否则可能导致接口返回 403 错误。
请求频率控制:单 IP 请求频率不宜过高(建议每秒不超过 2 次),可搭配代理 IP 池使用。
数据版权:采集的商品数据仅用于合法的跨境电商运营和分析,不得用于非法用途。
合规政策更新:速卖通的出口限制和认证要求可能随政策变化,需定期更新风控规则。
通过以上方案,开发者可高效获取速卖通商品的多语言详情数据,并实现跨境合规风险的自动化管控,为跨境电商业务的合规运营提供有力支持。
一、接口核心机制与数据结构分析
速卖通商品详情接口采用 RESTful 架构,核心数据通过以下两个接口协同返回:
基础信息接口
https://aliexpress.com/api/item_detail.htm
作用:返回商品标题、价格、主图、销量等核心信息。
关键参数:itemId(商品 ID)、language(语言编码,如en、ru)、currency(货币编码,如USD、EUR)。
详情内容接口
https://aliexpress.com/api/get_desc_module
作用:返回商品详情页的 HTML 内容、规格参数、售后政策等。
关键参数:itemId、descVersion(详情版本号,从基础信息接口获取)。
核心突破点:
多语言数据:接口通过language参数返回对应语言的商品信息,需动态切换语言编码以获取全量数据。
跨境合规校验:接口返回数据包含restriction字段,标注商品的出口限制、禁运国家等合规信息,需特殊处理。
反爬机制:接口对请求头的User-Agent、Referer和cookie进行严格校验,且descVersion参数随商品更新而变化。
二、创新技术方案
1. 多语言数据采集器
自动切换语言编码,采集不同语种的商品信息,并进行结构化存储:
python
运行
import requests
import json
import time
from typing import Dict, List
class AliExpressMultiLangScraper:
def __init__(self, item_id: str):
self.item_id = item_id
self.session = requests.Session()
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": f"https://aliexpress.com/item/{item_id}.html",
"Accept-Language": "en-US,en;q=0.9",
"cookie": "ali_apache_id=xxx; xman_us_f=xxx" # 从浏览器复制有效cookie
})
self.languages = ["en", "ru", "es", "fr", "de"] # 目标语言编码
self.currencies = ["USD", "EUR", "RUB", "GBP"] # 目标货币编码
def _fetch_base_info(self, lang: str, currency: str) -> Dict:
"""获取指定语言和货币的商品基础信息"""
url = "https://aliexpress.com/api/item_detail.htm"
params = {
"itemId": self.item_id,
"language": lang,
"currency": currency,
"cache": int(time.time())
}
response = self.session.get(url, params=params)
return response.json()
def scrape_multi_lang_data(self) -> List[Dict]:
"""采集多语言商品数据"""
multi_lang_data = []
for lang in self.languages:
for currency in self.currencies:
try:
base_info = self._fetch_base_info(lang, currency)
if base_info.get("code") != 200:
continue
data = base_info.get("data", {})
# 提取核心字段
structured_data = {
"item_id": self.item_id,
"language": lang,
"currency": currency,
"title": data.get("title", ""),
"price": data.get("price", {}).get("currentPrice", 0),
"original_price": data.get("price", {}).get("originalPrice", 0),
"sales": data.get("trade", {}).get("salesCount", 0),
"rating": data.get("feedback", {}).get("averageStar", 0),
"desc_version": data.get("descModule", {}).get("descVersion", "")
}
multi_lang_data.append(structured_data)
time.sleep(1) # 控制请求频率
except Exception as e:
print(f"采集语言{lang}货币{currency}失败:{str(e)}")
return multi_lang_data
2. 详情内容解析器
从详情内容接口返回的 HTML 中提取规格参数、售后政策,并解析跨境合规信息:
python
运行
from lxml import etree
import re
class AliExpressDetailParser:
def __init__(self, item_id: str, session: requests.Session):
self.item_id = item_id
self.session = session
def fetch_detail_html(self, desc_version: str) -> str:
"""获取商品详情HTML"""
url = "https://aliexpress.com/api/get_desc_module"
params = {
"itemId": self.item_id,
"descVersion": desc_version,
"cache": int(time.time())
}
response = self.session.get(url, params=params)
data = response.json()
return data.get("data", {}).get("html", "")
def parse_compliance_info(self, base_info: Dict) -> Dict:
"""解析跨境合规信息"""
compliance = base_info.get("data", {}).get("restriction", {})
return {
"forbidden_countries": compliance.get("forbiddenCountries", []),
"export_restriction": compliance.get("exportRestriction", False),
"product_certifications": compliance.get("certifications", [])
}
def parse_spec_params(self, html: str) -> List[Dict]:
"""解析规格参数"""
tree = etree.HTML(html)
spec_params = []
# 规格参数通常在 class="spec-params" 的容器中
param_items = tree.xpath('//div[contains(@class, "spec-params")]//li')
for item in param_items:
key = item.xpath('./span[1]/text()')
value = item.xpath('./span[2]/text()')
if key and value:
spec_params.append({
"key": key[0].strip(),
"value": value[0].strip()
})
return spec_params
def parse_after_sale(self, html: str) -> Dict:
"""解析售后政策"""
tree = etree.HTML(html)
after_sale = {}
# 售后政策通常在 class="after-sale" 的容器中
after_sale_text = tree.xpath('//div[contains(@class, "after-sale")]/text()')
if after_sale_text:
text = "".join(after_sale_text).strip()
after_sale["refund_policy"] = "30-day refund" if "30-day refund" in text else ""
after_sale["warranty"] = "1-year warranty" if "1-year warranty" in text else ""
return after_sale
3. 跨境合规风控过滤器
根据采集到的合规信息,过滤出存在出口限制或禁运风险的商品,并生成风控报告:
python
运行
class CrossBorderRiskFilter:
def __init__(self, forbidden_countries: List[str] = None):
self.forbidden_countries = forbidden_countries or ["US", "UK", "EU"] # 目标禁运国家/地区
def filter_risky_products(self, product_data: Dict) -> Dict:
"""过滤风险商品并生成报告"""
compliance = product_data.get("compliance_info", {})
risk_report = {
"risk_level": "low",
"risk_reasons": []
}
# 检查禁运国家
if any(country in self.forbidden_countries for country in compliance.get("forbidden_countries", [])):
risk_report["risk_level"] = "high"
risk_report["risk_reasons"].append("商品被禁运至目标国家/地区")
# 检查出口限制
if compliance.get("export_restriction"):
risk_report["risk_level"] = "medium"
risk_report["risk_reasons"].append("商品存在出口限制")
# 检查认证缺失
required_certs = ["CE", "RoHS"] # 必需认证
product_certs = compliance.get("product_certifications", [])
missing_certs = [cert for cert in required_certs if cert not in product_certs]
if missing_certs:
risk_report["risk_level"] = "medium"
risk_report["risk_reasons"].append(f"缺失必需认证:{', '.join(missing_certs)}")
return {**product_data, "risk_report": risk_report}
三、完整调用流程与实战效果
python
运行
def main():
item_id = "100500585858585" # 目标商品ID
# 初始化多语言采集器
lang_scraper = AliExpressMultiLangScraper(item_id)
multi_lang_data = lang_scraper.scrape_multi_lang_data()
# 初始化详情解析器
detail_parser = AliExpressDetailParser(item_id, lang_scraper.session)
# 初始化合规风控过滤器
risk_filter = CrossBorderRiskFilter(forbidden_countries=["US", "EU"])
# 处理每个语言版本的商品数据
for data in multi_lang_data:
# 获取详情HTML
desc_version = data.get("desc_version", "")
if not desc_version:
continue
detail_html = detail_parser.fetch_detail_html(desc_version)
# 解析合规信息、规格参数和售后政策
base_info = lang_scraper._fetch_base_info(data["language"], data["currency"])
compliance_info = detail_parser.parse_compliance_info(base_info)
spec_params = detail_parser.parse_spec_params(detail_html)
after_sale = detail_parser.parse_after_sale(detail_html)
# 整合数据
product_data = {
**data,
"compliance_info": compliance_info,
"spec_params": spec_params,
"after_sale": after_sale
}
# 合规风控过滤
filtered_data = risk_filter.filter_risky_products(product_data)
# 打印结果
print(f"商品ID:{filtered_data['item_id']}")
print(f"语言:{filtered_data['language']}")
print(f"标题:{filtered_data['title']}")
print(f"价格:{filtered_data['price']} {filtered_data['currency']}")
print(f"销量:{filtered_data['sales']}件")
print(f"风险等级:{filtered_data['risk_report']['risk_level']}")
if filtered_data['risk_report']['risk_reasons']:
print(f"风险原因:{', '.join(filtered_data['risk_report']['risk_reasons'])}")
print("-" * 50)
if __name__ == "__main__":
main()
实战效果亮点:
多语言全覆盖:支持采集英、俄、西、法、德等多语言商品信息,满足跨境电商多市场运营需求。
合规风险预警:通过风控过滤器自动识别禁运商品、出口限制和认证缺失风险,降低跨境贸易合规风险。
结构化数据输出:规格参数、售后政策等非结构化数据被解析为标准字典格式,可直接用于商品上架、数据分析等场景。
四、方案优势与注意事项
核心优势
多语言采集能力:动态切换语言编码,突破单语言采集限制,适配速卖通全球多语言市场。
跨境合规风控:整合合规信息解析与风险过滤,帮助开发者快速识别高风险商品,避免贸易纠纷。
反爬适应性:模拟真实浏览器请求头和cookie,结合合理的请求频率控制,提升接口调用成功率。
注意事项
Cookie 有效性:cookie需定期从浏览器更新,否则可能导致接口返回 403 错误。
请求频率控制:单 IP 请求频率不宜过高(建议每秒不超过 2 次),可搭配代理 IP 池使用。
数据版权:采集的商品数据仅用于合法的跨境电商运营和分析,不得用于非法用途。
合规政策更新:速卖通的出口限制和认证要求可能随政策变化,需定期更新风控规则。
通过以上方案,开发者可高效获取速卖通商品的多语言详情数据,并实现跨境合规风险的自动化管控,为跨境电商业务的合规运营提供有力支持。

浙公网安备 33010602011771号