前言
小红书作为国内知名的社交电商平台,拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说,能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索API的调用。
免责声明:本文仅用于技术学习和研究目的,请遵守相关法律法规和平台服务条款,不得用于商业用途或恶意爬取。
技术架构概览
本项目主要包含以下核心功能:
- 商品搜索功能
- 商品详情获取
- 商家在线状态查询
- 请求签名生成
- 反爬虫参数构造
主要技术栈
- Python 3.x
- requests 库(HTTP请求)
- loguru 库(日志管理)
- 自定义加密算法
核心组件分析
1. 请求头参数构造
小红书的API需要多个关键参数来绕过反爬虫机制:
def xb3():
"""生成X-B3-TraceId"""
characters = "abcdef0123456789"
return ''.join(random.choice(characters) for _ in range(16))
def x_xray():
"""生成X-Xray-Traceid"""
atomic_integer = [random.randint(0, 2 ** 32 - 1)]
j16 = int(time.time() * 1000)
a16 = [
(j16 << 23) | (get_and_increment(atomic_integer) & 8570985),
next_long()
]
return f"{a16[0]:016x}{a16[1]:016x}"
关键参数说明:
X-B3-TraceId
: 16位随机十六进制字符串X-Xray-Traceid
: 基于时间戳和随机数生成的32位十六进制字符串shield
: 签名
2. Shield参数获取
Shield是小红书最关键的反爬虫参数,需要通过专门的服务来生成:
def get_shield(xhs_api_url, xy_common_params, deviceId, hmac):
"""获取Shield参数"""
shield_params = {
'noteid': '',
'param': xy_common_pa