news 2026/4/26 11:41:38

Shopee API逆向分析:如何用Python快速获取全站商品分类树(含完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shopee API逆向分析:如何用Python快速获取全站商品分类树(含完整代码)

Shopee API逆向分析:Python实战全站商品分类树获取

当我们需要分析电商平台商品结构时,获取完整的分类体系是基础工作。本文将分享如何通过Python逆向分析Shopee的API接口,高效获取包含一二级分类的商品分类树,并提供可直接运行的代码实现。

1. 技术准备与环境搭建

在开始之前,确保已安装以下Python库:

pip install requests pandas pyquery

建议使用Python 3.7+环境,主要依赖库包括:

  • requests:用于发送HTTP请求
  • pandas:数据处理和分析
  • pyquery:HTML解析

注意:实际操作前请确认目标网站的robots.txt协议,本文仅用于技术研究目的。

2. API接口分析

通过浏览器开发者工具分析Shopee网页请求,我们发现两个关键API端点:

  1. 获取基础分类(仅一级):

    /api/v4/pages/get_homepage_category_list
  2. 获取完整分类树(含二级):

    /api/v4/pages/get_category_tree

关键响应数据结构如下:

{ "data": { "category_list": [ { "catid": 11040766, "parent_catid": 0, "name": "Women's Apparel", "display_name": "女生衣著", "level": 1, "children": [ { "catid": 11042304, "parent_catid": 11040766, "name": "T-Shirts", "display_name": "T恤", "level": 2 } ] } ] } }

3. 分类数据获取实现

以下是完整的Python实现代码:

import requests import pandas as pd from pyquery import PyQuery as pq class ShopeeCategoryCrawler: def __init__(self): self.base_url = "https://shopee.com.my" self.session = requests.Session() self.session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': f'{self.base_url}/' }) def get_category_tree(self): """获取完整分类树""" api_url = f"{self.base_url}/api/v4/pages/get_category_tree" try: response = self.session.get(api_url, timeout=10) if response.status_code == 200: return response.json() raise Exception(f"API请求失败: {response.status_code}") except Exception as e: print(f"获取分类树出错: {str(e)}") return None def parse_categories(self, data): """解析分类数据""" categories = [] for cat in data['data']['category_list']: categories.append({ 'level': 1, 'catid': cat['catid'], 'parent_id': 0, 'name': cat['name'], 'display_name': cat['display_name'] }) for child in cat.get('children', []): categories.append({ 'level': 2, 'catid': child['catid'], 'parent_id': cat['catid'], 'name': child['name'], 'display_name': child['display_name'] }) return categories def export_to_excel(self, data, filename): """导出到Excel""" df = pd.DataFrame(data) df.to_excel(filename, index=False) print(f"数据已导出到 {filename}") if __name__ == '__main__': crawler = ShopeeCategoryCrawler() tree_data = crawler.get_category_tree() if tree_data: categories = crawler.parse_categories(tree_data) crawler.export_to_excel(categories, 'shopee_categories.xlsx')

4. 关键技术点解析

4.1 请求头模拟

Shopee的API对请求头有基本验证,需要设置合理的User-Agent和Referer:

self.session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': f'{self.base_url}/' })

4.2 异常处理机制

完善的异常处理保证程序稳定性:

try: response = self.session.get(api_url, timeout=10) if response.status_code == 200: return response.json() raise Exception(f"API请求失败: {response.status_code}") except Exception as e: print(f"获取分类树出错: {str(e)}") return None

4.3 数据解析技巧

使用递归方式处理多级分类:

def parse_categories(self, data): categories = [] for cat in data['data']['category_list']: # 一级分类处理 categories.append({...}) # 二级分类处理 for child in cat.get('children', []): categories.append({...}) return categories

5. 数据应用扩展

获取分类数据后,可以进一步实现:

  1. 商品列表获取

    def get_items_by_category(self, cat_id, page=0, limit=60): api_url = f"{self.base_url}/api/v4/search/search_items" params = { 'by': 'relevancy', 'fe_categoryids': cat_id, 'limit': limit, 'newest': page * limit, 'order': 'desc', 'page_type': 'search', 'scenario': 'PAGE_OTHERS', 'version': 2 } return self.session.get(api_url, params=params).json()
  2. 分类关系可视化

    import networkx as nx import matplotlib.pyplot as plt def visualize_category_tree(categories): G = nx.Graph() for cat in categories: if cat['level'] == 1: G.add_node(cat['catid'], label=cat['display_name']) else: G.add_edge(cat['parent_id'], cat['catid']) nx.draw(G, with_labels=True) plt.show()

6. 反爬应对策略

在实际应用中可能会遇到反爬措施,建议:

  1. 合理设置请求间隔
  2. 使用代理IP池
  3. 模拟真实用户行为模式
  4. 处理Cookie和Session
# 示例:使用代理 proxies = { 'http': 'http://your_proxy:port', 'https': 'https://your_proxy:port' } response = self.session.get(api_url, proxies=proxies)

7. 完整项目结构建议

对于生产环境应用,建议采用如下项目结构:

shopee_crawler/ ├── core/ │ ├── crawler.py # 主爬虫逻辑 │ ├── parser.py # 数据解析 │ └── storage.py # 数据存储 ├── utils/ │ ├── proxy.py # 代理管理 │ └── logger.py # 日志记录 ├── config.py # 配置文件 └── main.py # 入口文件

这种模块化设计便于功能扩展和维护。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 11:40:53

K8s StatefulSet 存储卷自动挂载机制

Kubernetes StatefulSet存储卷自动挂载机制解析 在分布式应用中,有状态服务的数据持久化是核心需求。StatefulSet作为Kubernetes管理有状态工作负载的核心控制器,其存储卷自动挂载机制通过独特的拓扑规则和声明式配置,实现了Pod与持久化存储…

作者头像 李华
网站建设 2026/4/26 11:37:19

Escrcpy:终极安卓大屏控制方案,免费体验高效多设备管理

Escrcpy:终极安卓大屏控制方案,免费体验高效多设备管理 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否厌倦了在小…

作者头像 李华
网站建设 2026/4/26 11:35:15

3分钟部署IPXWrapper:让经典游戏在现代Windows上重获联机能力

3分钟部署IPXWrapper:让经典游戏在现代Windows上重获联机能力 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还在为《星际争霸》《红色警戒2》《暗黑破坏神》等经典游戏无法在Windows 10/11上联机而烦恼吗&#xff…

作者头像 李华
网站建设 2026/4/26 11:34:18

多智能体协作系统架构解析:从原理到应用实践

1. 项目概述:从“智能体学院”看AI协作范式的演进最近在GitHub上看到一个挺有意思的项目,叫“microsoft/agent-academy”。光看名字,你可能会觉得这又是一个微软推出的某个AI框架或者工具库。但深入进去你会发现,它更像是一个精心…

作者头像 李华