小红薯商品搜索详情分析与实现

article/2025/6/7 13:19:21

前言

小红书作为国内知名的社交电商平台,拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说,能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索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_params,'device': deviceId,'hmac': hmac,'url': xhs_api_url,'direction': '48'}body = urlencode(shield_params)headers = {}shield_url = ""response = requests.post(shield_url, data=body, headers=headers, timeout=5)return response.text.strip()

3. 设备指纹构造

小红书需要模拟真实的移动设备环境:

# 设备相关参数
deviceId = '换成自己的'
fid = '换成自己的'
smid = '换成自己的'# User-Agent模拟Android设备
need_ua = '换成自己的'

主要功能实现

1. 商品搜索功能

def search_xiaohongshu(page=1, keyword='ccd相机', sid=None):"""搜索小红书商品,支持翻页Args:page (int): 页码keyword (str): 搜索关键词sid (str): 会话IDReturns:dict: 商品搜索结果"""# 构造搜索参数xhs_params = {'keyword': keyword,'filters': '','page': page,'size': '20','sort': '','source': 'explore_feed','search_id': J(),  # 生成唯一搜索ID'page_pos': 0,'store_id': '','geo': '','sku_list': '','note_list': '','allow_rewrite': 'true'}# 发送请求并返回结果response = requests.get(xhs_base_url, params=xhs_params, headers=xhs_headers, timeout=10)return response.json()

2. 商品详情获取

def get_product_detail(skuId, sid=None):"""获取商品详细信息"""base_url = "https://mall.xiaohongshu.com/api/store/jpd/edith/detail/primary"params = {"sku_id": skuId,"source": "mall_home","address_id": "","cart_key": "","pre_page": "mall_home","trade_ext": "","move_ahead_pic_id": ""}# 构造完整请求并返回结果response = requests.get(xhs_api_url, headers=xhs_headers, timeout=5)return response.json()

3. 商家状态查询

def get_seller_status(sellerId, sid):"""查询商家在线状态"""url = "https://www.xiaohongshu.com/api/edith/cs/seller/online/status"params = {"sellerId": sellerId,"sid": f"session.{sid}",}response = requests.get(url, headers=headers, params=params)return response.json()

参数配置详解

xy-common-params参数

这是小红书API中最重要的公共参数集合:

xy_common_params_dict = {'fid': fid,                           # 设备指纹ID'device_fingerprint': smid,           # 设备指纹'device_fingerprint1': smid,          # 设备指纹副本'cpu_name': 'Qualcomm Technologies, Inc SM8150',  # CPU信息'gid': x_mini_gid,                    # 小程序GID'device_model': 'phone',              # 设备类型'launch_id': '1748314107',            # 启动ID'tz': 'Asia/Shanghai',                # 时区'channel': 'Vivo',                    # 渠道'versionName': '8.84.0',              # 版本名称'overseas_channel': '0',               # 海外渠道'deviceId': deviceId,                 # 设备ID'platform': 'android',               # 平台'sid': f'session.{sid}',              # 会话ID'identifier_flag': '4',               # 标识符标志't': '1748314126',                    # 时间戳'project_id': 'ECFAAF',              # 项目ID'build': '8840940',                   # 构建号'x_trace_page_current': 'search_result_goods',  # 当前页面'lang': 'zh-Hans',                    # 语言'app_id': 'ECFAAF01',                # 应用ID'uis': 'light',                       # UI主题'teenager': '0'                       # 青少年模式
}

使用示例

if __name__ == "__main__":KEYWORD = 'ccd相机'  # 搜索关键词skuid = '67df8608791e9400157c0328'sid = '1747021841033229293800'# 搜索商品search_data = search_xiaohongshu(1, keyword=KEYWORD, sid=sid)print("搜索结果:", search_data)# 获取商品详情detail_data = get_product_detail(skuid, sid)print("商品详情:", detail_data)# 查询商家状态seller_data = get_seller_status('67852ceaa78db60015df3130', sid)print("商家状态:", seller_data)

结果

技术难点与解决方案

1. 反爬虫机制

  • 问题: 小红书有复杂的反爬虫机制
  • 解决: 通过模拟真实设备环境和动态生成签名参数

2. 参数加密

  • 问题: 多个参数需要特殊的加密算法
  • 解决: 逆向分析并实现相应的加密函数

3. 请求频率控制

  • 问题: 频繁请求可能被封禁
  • 解决: 添加随机延时和请求间隔控制

注意事项与建议

1. 合规使用

  • 严格遵守robots.txt协议
  • 控制请求频率,避免对服务器造成压力
  • 仅用于学习研究,不得商业使用

2. 参数维护

  • 定期更新设备指纹和签名参数
  • 监控API变化,及时调整代码

3. 错误处理

  • 添加完善的异常处理机制
  • 实现请求重试逻辑
  • 记录详细的日志信息

总结

本文详细介绍了小红书商品搜索API的逆向工程实现过程,包括关键参数的构造、反爬虫机制的绕过以及核心功能的实现。通过这个项目,可以深入理解现代Web应用的反爬虫机制和相应的应对策略。

在实际使用中,请务必遵守相关法律法规和平台规则,将技术用于正当用途。同时,随着平台技术的不断升级,相关参数和接口可能会发生变化,需要持续维护和更新代码。

希望这篇文章能够帮助大家更好地理解Web爬虫技术和反爬虫机制,为后续的学习和研究提供参考。


相关资源:

  • Python requests文档
  • Web爬虫技术指南
  • 反爬虫技术解析

http://www.hkcw.cn/article/gXQTqRUrTj.shtml

相关文章

国标GB28181设备管理软件EasyGBS视频平台筑牢文物保护安全防线创新方案

一、方案背景​ 文物作为人类文明的珍贵载体&#xff0c;具有不可再生性。当前&#xff0c;盗窃破坏、游客不文明行为及自然侵蚀威胁文物安全&#xff0c;传统保护手段存在响应滞后、覆盖不全等局限。随着5G与信息技术发展&#xff0c;基于GB28181协议的EasyGBS视频云平台&…

使用 Python + ExecJS 获取网易云音乐歌曲歌词

&#x1f3b5; 使用 Python ExecJS 获取网易云音乐歌曲歌词 在本篇博客中&#xff0c;我们将通过一个完整的 Python 脚本&#xff0c;利用 execjs 模块调用 JavaScript 代码&#xff0c;成功获取网易云音乐的歌曲歌词。整个过程涵盖了加密参数的生成、API 请求发送与歌词提取…

云台式激光甲烷探测器:守护工业安全的“智慧之眼”

在石油化工、天然气场站、城市燃气管网等场景中&#xff0c;甲烷泄漏的早期监测是保障生产安全的核心防线。云台式激光甲烷探测器凭借高精度、无接触、智能化的技术优势&#xff0c;成为工业安全监测领域的革新者。本文将深度解析其技术原理、核心功能及适用场景&#xff0c;助…

基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破

【导读】 应对气候变化对非洲象的生存威胁&#xff0c;本研究创新采用无人机航拍结合AI姿态分析技术&#xff0c;突破传统观测局限。团队在肯尼亚桑布鲁保护区对比测试DeepLabCut与YOLO-NAS-Pose两种模型&#xff0c;首次将后者引入野生动物研究。通过检测象群头部、脊柱等关键…

CppCon 2014 学习:Anatomy of a Smart Pointer

智能指针&#xff08;smart pointer&#xff09;可以这样解释&#xff1a; 它是一个指针的容器——内部保存了一个普通指针&#xff0c;并且可以在需要时把指针交给你使用。它支持RAII&#xff08;资源获取即初始化&#xff09;&#xff0c;也就是说资源&#xff08;比如内存&…

GNhao,国外云手机号智能选择与应用解析!

GNhao&#xff0c;国外云手机号智能选择与应用解析&#xff01; 在数字时代&#xff0c;国外云手机号成为跨境沟通的关键。GNhao凭借其稳定的国外云手机号服务&#xff0c;满足了用户多样需求&#xff0c;提升了通讯效率。国外云手机号广泛应用于海外注册、跨境营销和社交&…

AcWing 843:n-皇后问题 ← dfs

【题目来源】 https://www.acwing.com/problem/content/845/ https://www.lanqiao.cn/problems/1508/learning/ https://www.luogu.com.cn/problem/P1219 【题目描述】 n 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任…

风机巡检方案艰难之路

2025年是“双碳”目标提出后首个五年计划收关节点&#xff0c;政策端通过强化大基地建设与海风开发确保既定风电目标落地。根据《2025年能源工作指导意见》&#xff0c;2025年将通过加速第二批/第三批大基地及海上风电建设保障目标兑现。据联储证券预计&#xff0c;2025年全年陆…

Java-redis实现限时在线秒杀功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql数据库表设…

龙虎榜——20250603

上证指数放量收阳线&#xff0c;阳包阴&#xff0c;量能超过5天均量&#xff0c;个股涨多跌少&#xff0c;行情有所回暖。 深证指数缩量收阳线&#xff0c;再次回打支撑位。 2025年6月3日龙虎榜行业方向分析 1. 医药&#xff08;创新药原料药出口&#xff09; 代表标的&…

永磁同步电机无速度算法--互补滑模观测器

一、原理介绍 采用了互补滑模变结构观测器&#xff0c;滑模面选择了广义滑模面和互补滑模面相结合的设计&#xff0c;这样可以有效地降低系统的跟踪误差&#xff0c;提高系统的跟踪性能&#xff0c;切换控制率选择饱和函数&#xff0c;抑制了传统SMC 的抖振现象。 二、仿真模型…

2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测

目录 1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取7..算法辅导应用定制读者交流 1.摘要 蜣螂优化算法&#xff08;DBO&#xff09;作为一种创新元启发式算法&#xff0c;虽具备良好的数值优化能力&#xff0c;但存在收敛速度慢且易陷入局部最优的问题…

【notepad++】如何设置notepad++背景颜色?

如何设置notepad背景颜色&#xff1f; 设置--语言格式设置 勾选使用全局背景色 例如选择护眼色---80&#xff0c;97&#xff0c;205&#xff1b;

Gitee Wiki:重塑关键领域软件研发的知识管理范式

在数字化转型浪潮席卷全球的当下&#xff0c;关键领域软件研发正面临前所未有的知识管理挑战。传统文档管理模式的局限性日益凸显&#xff0c;知识传承的断层问题愈发严重&#xff0c;团队协作效率的瓶颈亟待突破。Gitee Wiki作为新一代知识管理平台&#xff0c;正在通过技术创…

电源防反接保护电路分析

电路&#xff1a; 这是一个电源输入防反接的电路&#xff0c;通过NMOS来实现。 1、正常接入电源。 正常接入电源的时候&#xff0c;VCC12V&#xff0c;这时候&#xff0c;电流通过R1、R2和NMOS的体二极管D形成一个回路&#xff0c;此时NMOS还未导通。 通过计算可以得到Vs0.7V&a…

焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别

数据集中有超过一半为增强图片&#xff0c;请认真观察图片预览 数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;5543 标注数量(json文件个数)&#xff1a;5543 标注类别数&#xff1a;4…

腾讯云国际版和国内版账户通用吗?一样吗?为什么?

在当今全球化的数字化时代&#xff0c;云计算服务成为众多企业和个人拓展业务、存储数据的重要选择。腾讯云作为国内领先的云服务提供商&#xff0c;其国际版和国内版备受关注。那么&#xff0c;腾讯云国际版和国内版账户是否通用&#xff1f;它们究竟一样吗&#xff1f;背后又…

C++初赛的三讲

C++初赛的三讲 C++初赛第一/二讲链接:CSP-J算法串讲完善程序解题思路1.查找算法顺序查找二分查找二分查找的步骤二分查找法的代码2.排序算法冒泡排序冒泡排序的代码插入排序插入排序的代码选择排序选择排序的代码计数排序C++初赛第一/二讲链接: 1.链接: C++初赛第一讲1.0 2.…

pikachu靶场通关笔记12 XSS关卡08-XSS之htmlspecialchars(四种方法渗透)

目录 一、htmlspecialchars 二、源码分析 1、进入靶场 2、代码审计 3、渗透思路 &#xff08;1&#xff09;利用单引号绕过 &#xff08;2&#xff09;利用协议绕过 三、渗透实战 1、探测是否有过滤 2、注入payload1 3、注入payload2 4、注入payload3 5、注入payl…

Github 2025-06-03Python开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2025-06-03统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目10Rust项目1HTML项目1C项目1 系统设计指南 创建周期&#xff1a;2507 天开发语言&#xff1a;Pyt…