news 2026/5/26 8:31:31

速卖通商品链接获取速卖通商品详情数据(用 Python实现速卖通商品信息抓取)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
速卖通商品链接获取速卖通商品详情数据(用 Python实现速卖通商品信息抓取)

一、前置说明(合规与风险)

  1. 合规性:速卖通官方禁止未经授权的爬虫行为,抓取数据仅用于技术学习,请勿用于商业用途;优先推荐使用速卖通开放平台的官方 API(需申请开发者账号和授权)。
  2. 反爬应对:速卖通有反爬机制(IP 封禁、请求频率限制、验证码),建议添加请求延迟、使用代理 IP、模拟浏览器 Headers。

二、实现思路

  1. 从商品链接中提取商品 ID(速卖通链接格式固定,ID 是核心标识);
  2. 模拟浏览器发送 HTTP 请求,获取商品页面 HTML;
  3. 解析页面中的 JSON 数据(速卖通商品数据以 JSON 形式内嵌在 HTML 中);
  4. 提取核心商品信息(标题、价格、销量、SKU、物流等);
  5. 整理并输出数据(如 JSON/Excel)。

三、Python 实现代码

1. 依赖库安装

bash

运行

pip install requests parsel jsonpath python-dotenv
  • requests:发送 HTTP 请求;
  • parsel:解析 HTML/XML(比 BeautifulSoup 更高效);
  • jsonpath:提取 JSON 数据;
  • python-dotenv:管理环境变量(可选,用于配置代理)。
2. 完整代码

python

运行

import re import json import time import requests from parsel import Selector from jsonpath import jsonpath # -------------------------- 配置项 -------------------------- # 模拟浏览器Headers(关键,避免被识别为爬虫) HEADERS = { "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", "Accept-Language": "en-US,en;q=0.9", "Referer": "https://www.aliexpress.com/", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" } # 请求延迟(秒),避免高频请求被封 REQUEST_DELAY = 2 # 代理配置(可选,如需要请替换为自己的代理) PROXIES = { # "http": "http://127.0.0.1:7890", # "https": "http://127.0.0.1:7890" } # -------------------------- 核心函数 -------------------------- def extract_product_id(url): """从商品链接提取商品ID""" # 速卖通链接常见格式: # https://www.aliexpress.com/item/1005005808225698.html # https://www.aliexpress.us/item/1005005808225698.html pattern = r"/item/(\d+)\.html" match = re.search(pattern, url) if match: return match.group(1) else: raise ValueError("无效的速卖通商品链接,无法提取商品ID") def get_aliexpress_product_detail(product_id): """抓取商品详情数据""" # 构造商品详情页URL(统一使用国际版链接) url = f"https://www.aliexpress.com/item/{product_id}.html" try: # 发送请求(添加延迟) time.sleep(REQUEST_DELAY) response = requests.get( url=url, headers=HEADERS, proxies=PROXIES, timeout=15, allow_redirects=True # 处理重定向 ) response.raise_for_status() # 抛出HTTP错误(如404/500) # 解析HTML selector = Selector(text=response.text) # 提取内嵌的商品JSON数据(速卖通核心数据在window.runParams中) json_data_str = selector.css("script:contains('window.runParams')::text").get() if not json_data_str: raise ValueError("未找到商品核心数据(可能被反爬拦截)") # 清洗JSON字符串(提取有效部分) json_data_str = json_data_str.replace("window.runParams = ", "").rstrip(";") product_data = json.loads(json_data_str) # 提取核心信息(可根据需求扩展) product_info = { "商品ID": product_id, "商品标题": jsonpath(product_data, "$.productTitle")[0] if jsonpath(product_data, "$.productTitle") else None, "原价": jsonpath(product_data, "$.originalPrice")[0] if jsonpath(product_data, "$.originalPrice") else None, "售价": jsonpath(product_data, "$.salePrice")[0] if jsonpath(product_data, "$.salePrice") else None, "货币单位": jsonpath(product_data, "$.currencyCode")[0] if jsonpath(product_data, "$.currencyCode") else None, "总销量": jsonpath(product_data, "$.tradeCount")[0] if jsonpath(product_data, "$.tradeCount") else None, "商品评分": jsonpath(product_data, "$.productScore")[0] if jsonpath(product_data, "$.productScore") else None, "店铺名称": jsonpath(product_data, "$.storeName")[0] if jsonpath(product_data, "$.storeName") else None, "发货地": jsonpath(product_data, "$.shipFrom")[0] if jsonpath(product_data, "$.shipFrom") else None, "是否包邮": jsonpath(product_data, "$.freeShipping")[0] if jsonpath(product_data, "$.freeShipping") else None, "商品主图": jsonpath(product_data, "$.imageUrl")[0] if jsonpath(product_data, "$.imageUrl") else None } # 提取SKU信息(可选) sku_list = [] sku_data = jsonpath(product_data, "$.skuModule.skuInfoList")[0] if jsonpath(product_data, "$.skuModule.skuInfoList") else [] for sku in sku_data: sku_info = { "SKU ID": sku.get("skuId"), "SKU价格": sku.get("salePrice"), "SKU库存": sku.get("stock"), "SKU属性": sku.get("skuAttr") } sku_list.append(sku_info) product_info["SKU列表"] = sku_list return product_info except requests.exceptions.RequestException as e: return f"请求错误:{str(e)}" except json.JSONDecodeError as e: return f"JSON解析错误:{str(e)}" except Exception as e: return f"未知错误:{str(e)}" # -------------------------- 测试调用 -------------------------- if __name__ == "__main__": # 测试商品链接(替换为自己要抓取的链接) product_url = "https://www.aliexpress.com/item/1005005808225698.html" # 提取商品ID并抓取数据 try: product_id = extract_product_id(product_url) print(f"提取的商品ID:{product_id}") product_detail = get_aliexpress_product_detail(product_id) # 格式化输出结果 print("\n商品详情数据:") print(json.dumps(product_detail, ensure_ascii=False, indent=4)) except ValueError as e: print(f"错误:{str(e)}")

四、关键说明

1. 商品 ID 提取

速卖通商品链接的核心是/item/[商品ID].html部分,通过正则表达式可稳定提取。

2. 反爬优化(重要)
  • Headers 模拟:必须配置真实的User-Agent,否则会被直接拦截;
  • 请求延迟REQUEST_DELAY设置 2-5 秒,避免高频请求;
  • 代理 IP:如果频繁请求被封 IP,需使用代理池(如阿布云、快代理等);
  • Cookie / 会话保持:若遇到验证码,可手动登录后复制 Cookie 到 Headers 中。
3. 数据解析

速卖通商品页面的核心数据存储在window.runParams这个 JS 变量中,提取并解析该变量即可获取结构化 JSON 数据,无需解析复杂 HTML。

4. 扩展功能(可选)
  • 提取商品描述:product_data["descriptionModule"]["description"]
  • 提取物流信息:product_data["shippingModule"]
  • 保存数据到 Excel:使用pandas库将product_info写入 Excel;
  • 批量抓取:循环读取链接列表,批量提取数据。

五、官方 API 方式(推荐,合规)

如果需要长期稳定使用,建议接入速卖通开放平台 API:

  1. 注册速卖通开发者账号:https://developer.aliexpress.com/
  2. 创建应用,获取App KeyApp Secret
  3. 调用aliexpress.item_get接口(需授权),示例代码:

python

运行

import requests import hashlib import time def aliexpress_api_get(product_id, app_key, app_secret): """官方API调用示例(需替换为自己的密钥)""" timestamp = str(int(time.time() * 1000)) # 签名生成(参考官方文档) sign_str = f"app_key{app_key}formatjsonmethodaliexpress.item.getproduct_id{product_id}timestamp{timestamp}v2.0{app_secret}" sign = hashlib.md5(sign_str.encode()).hexdigest().upper() # API请求参数 params = { "method": "aliexpress.item.get", "app_key": app_key, "product_id": product_id, "timestamp": timestamp, "format": "json", "v": "2.0", "sign": sign } response = requests.get("https://gw.api.aliexpress.com/openapi/param2/2/aliexpress.item.get", params=params) return response.json()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 16:12:53

UE4SS终极指南:从安装到精通Unreal Engine游戏脚本开发

UE4SS终极指南:从安装到精通Unreal Engine游戏脚本开发 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …

作者头像 李华
网站建设 2026/5/26 4:56:48

校园外卖|基于springboot校园外卖系统(源码+数据库+文档)

校园外卖 目录 基于springboot vue校园外卖系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue校园外卖系统 一、前言 博主介绍:✌️大…

作者头像 李华
网站建设 2026/5/26 3:27:52

【MCP MS-720调试黑科技】:3款必用工具+2个关键日志分析技巧

第一章:MCP MS-720 Agent 调试工具概述MCP MS-720 Agent 是一款专为嵌入式设备远程监控与故障诊断设计的调试代理程序,广泛应用于工业自动化、边缘计算节点及物联网终端设备中。该工具通过轻量级通信协议与主控服务器交互,支持实时日志采集、…

作者头像 李华
网站建设 2026/5/25 13:24:30

【企业级图数据查询优化指南】:基于MCP DP-420的Agent调优实践

第一章:企业级图数据查询优化概述在现代企业级应用中,图数据已成为处理复杂关联关系的核心载体。随着社交网络、金融风控、知识图谱等场景对实时性和可扩展性的要求日益提升,传统查询方式难以满足毫秒级响应与高并发访问的需求。因此&#xf…

作者头像 李华
网站建设 2026/5/26 5:58:22

为什么顶尖团队都在测试MCP PL-600 Agent?:内部评测数据首次公开

第一章:MCP PL-600 Agent 功能测试概述MCP PL-600 Agent 是一款专为工业控制场景设计的通信协议代理模块,支持多通道数据采集与协议转换功能。该模块在实际部署前需经过完整的功能验证,以确保其在复杂网络环境下的稳定性与兼容性。功能测试涵…

作者头像 李华
网站建设 2026/5/25 16:12:42

针对软件外包及人才服务型上市公司的业务特性,资金管理平台的核心模块围绕资金 “收、付、管、投、控” 全流程设计,可划分为 基础支撑层、核心业务层、智能决策层、合规监管层 四大层级

针对软件外包及人才服务型上市公司的业务特性,资金管理平台的核心模块围绕资金 “收、付、管、投、控” 全流程设计,可划分为 基础支撑层、核心业务层、智能决策层、合规监管层 四大层级,各模块相互协同,覆盖资金管理核心需求。一…

作者头像 李华