当前位置: 首页 > news >正文

Shopee 商品数据高效抓取:请求与缓存校验 3 大核心

本文针对 Shopee 平台商品数据抓取中常见的反爬拦截、效率低下、重复请求三大痛点,总结了经过生产验证的 3 大核心要点。适用于跨境选品、竞品分析、价格监控等场景

一、URL 结构与 ID 快速提取

Shopee 全球所有站点采用完全统一的商品 URL 设计,无需针对不同地区单独适配解析逻辑,这是实现批量自动化抓取的基础。
1.全球通用 URL 格式
标准商品 URL 结构:

https://{地区代码}.shopee.com/product/{店铺ID}/{商品ID}

常见地区代码:tw (中国台湾)、sg (新加坡)、my (马来西亚)、th (泰国)、id (印尼)、ph (菲律宾)、vn (越南)
兼容性:支持带任意查询参数的 URL(如?spm=xxx&utm_source=yyy),不影响 ID 提取
示例:

importredefget_shopee_ids(url:str)->tuple[str|None,str|None]:""" 从Shopee商品URL中提取店铺ID和商品ID :param url: Shopee商品完整URL :return: (店铺ID, 商品ID),解析失败返回(None, None) """pattern=r'/product/(\d+)/(\d+)'match=re.search(pattern,url)returnmatch.groups()ifmatchelse(None,None)# 测试示例if__name__=="__main__":# http://o0b.cn/alantest_urls=["https://shopee.tw/product/123456789/987654321","https://shopee.sg/product/987654321/123456789?spm=a1z10.1-c-seller","https://invalid-url.com/product/abc/123"]forurlintest_urls:shop_id,item_id=get_shopee_ids(url)print(f"URL:{url}")print(f"店铺ID:{shop_id},商品ID:

二、必带核心请求头

Shopee 的反爬系统对请求头校验极为严格,只需配置以下 5 个核心请求头,即可绕过 90% 以上的基础拦截,其余非必要头字段可全部省略,减少请求体积

基础商品页面请求示例

fromcurl_cffiimportrequestsimportrandomimporttime session=requests.Session(headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/125.0.0.0 Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"zh-TW,zh;q=0.9","Referer":"https://shopee.tw/","Cookie":"粘贴你浏览器里的完整 Cookie",},impersonate="chrome101",)# http://o0b.cn/alanurls=["https://shopee.tw/product/123456789/987654321","https://shopee.tw/product/123456789/123456789",]forurlinurls:r=session.get(url,timeout=10)print(url,r.status_code)time.sleep(random.uniform(1.2,2.5))

三、ETag 缓存校验

Shopee 使用MD5 哈希值作为 ETag 实体标签,唯一标识商品页面的特定版本。通过缓存校验机制,可避免重复下载未变化的页面内容,对于价格、库存等更新频率较低的字段,能提升 90% 以上的抓取效率,同时大幅降低被平台的风险。

ETag 生成规则
若因特殊情况无法获取服务器返回的 ETag,可使用 Shopee 官方规则自行计算

importhashlibdefgenerate_etag(shop_id:str,item_id:str)->str:"""根据Shopee官方规则生成备用ETag"""raw=f"{shop_id}_{item_id}".encode("utf-8")returnf'"{hashlib.md5(raw).hexdigest()}"'

带缓存的请求代码

fromtypingimportDict,Tupleimportrequestsimporthashlib cache:Dict[str,Tuple[str,str]]={}defget_shopee_ids(url:str)->Tuple[str,str]:parts=url.split('/')fori,partinenumerate(parts):ifpart=='product'andi+2<len(parts):returnparts[i+1],parts[i+2]return'',''defget_common_headers(region:str,cookie:str)->dict:return{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36","Cookie":cookie,"Referer":f"https://{region}.shopee.com/","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"zh-TW,zh;q=0.9,en;q=0.8"}defgenerate_etag(shop_id:str,item_id:str)->str:returnhashlib.md5(f"{shop_id}_{item_id}".encode()).hexdigest()deffetch_shopee_with_cache(url:str,cookie:str)->str:shop_id,item_id=get_shopee_ids(url)ifnotshop_idornotitem_id:raiseValueError("无效的Shopee商品URL")cache_key=f"{shop_id}_{item_id}"region=url.split('.')[0].split('//')[-1]headers=get_common_headers(region,cookie)ifcache_keyincache:cached_etag,cached_content=cache[cache_key]headers["If-None-Match"]=cached_etag response=requests.get(url,headers=headers,timeout=10)ifresponse.status_code==304:print(f"[缓存命中]{cache_key}资源未变化,使用本地缓存")returncached_contentelifresponse.status_code==200:etag=response.headers.get("ETag",generate_etag(shop_id,item_id))content=response.text cache[cache_key]=(etag,content)print(f"[缓存更新]{cache_key}资源已更新,缓存已刷新")returncontentelse:response.raise_for_status()if__name__=="__main__":MY_COOKIE="替换为你的Shopee Cookie(从浏览器复制完整Cookie字符串)"test_url="https://shopee.tw/product/123456789/987654321"try:content1=fetch_shopee_with_cache(test_url,MY_COOKIE)print(f"第一次请求内容长度:{len(content1)}字符\n")content2=fetch_shopee_with_cache(test_url,MY_COOKIE)print(f"第二次请求内容长度:{len(content2)}字符\n")assertcontent1==content2,"缓存内容与原始内容不一致"print("缓存校验成功,两次请求内容完全一致")exceptExceptionase:print(f"请求失败:{str(e)}")

四、避坑指南

Cookie 获取与更新:从浏览器开发者工具 Network 面板,任意 Shopee 页面请求的 Cookie 中复制SPC_EC和SPC_U字段,有效期通常为 1-2 周,过期后需重新获取

请求频率控制:建议单 IP 每秒请求不超过 1 次,批量抓取时添加random.uniform(0.5, 1.5)随机延迟,避免触发 IP 封禁

地区一致性:请求头中的 Referer 必须与 URL 中的地区代码完全一致,否则会被重定向或拦截

动态内容处理:商品实时价格、库存、销量等数据通过 AJAX 接口加载,需单独请求https://{地区}.shopee.com/api/v4/item/get接口获取

异常处理:添加重试机制(使用tenacity库),针对 429(请求过多)、503(服务不可用)等错误进行指数退避重试

http://www.jsqmd.com/news/896805/

相关文章:

  • 3步掌握SMUDebugTool:解锁AMD Ryzen处理器的隐藏性能
  • 【独家首发】ChatGPT用户行为追踪白皮书(基于12,847名实测用户+眼动+日志双模数据)
  • RRAM神经加速器端到端设计:从算法到电路的电路级验证流程
  • 2026年4月热收缩膜封切机企业找哪家,称重包装机/果干包装机/热收缩膜封切机,热收缩膜封切机直销厂家有哪些 - 品牌推荐师
  • 搭 K8s 环境踩过这 4 个坑,你就能少走半个月弯路【系列一】
  • 5分钟搞定缠论分析:ChanlunX让你的技术分析变得如此简单
  • 基于压缩感知与字典学习的中波红外计算光谱成像技术
  • 紧急通知!京东618第二波红包已开启,淘宝618第二波红包今夜0点重磅接力!今晚8点大额加码翻倍全攻略 - 资讯焦点
  • 关于用flex弹性盒子修饰网页
  • Ryujinx存档备份终极指南:如何永久保护你的Switch游戏进度
  • GEO生成引擎优化:2026年AI搜索时代的流量新变量
  • 终极指南:如何在Windows系统上安装macOS风格的高清鼠标指针
  • 高洁净循环泵厂家排名:半导体制药行业优选指南 - 资讯焦点
  • 星露谷农场规划器:从零开始打造完美农场的终极指南
  • ChatGPT角色设定失效真相大起底(92%用户踩中的3个隐性陷阱+权威测试数据验证)
  • 如何在Windows上获得macOS风格的鼠标指针体验
  • 定制磁力泵厂家怎么选?2025年十大专业品牌排名推荐 - 资讯焦点
  • 2025年PS3 webMAN MOD终极指南:解锁游戏加载与系统管理的完整解决方案
  • Wi-Fi反向散射通信:多天线检测阈值优化方案详解
  • 【无痛安装】Deepseek接入Claude Code教程:详细步骤包括windows和linux
  • Git实战:深度解析‘Your branch is ahead of origin/master’的成因与精准应对策略
  • 长尾关键词优化策略在SEO中的核心作用与提升技巧
  • 认识电子元器件 —— 三极管与MOS管篇:参数、选型与应用
  • 动态自适应混合容错调度:从故障预测到遗传算法资源优选
  • LeetDown:让老款iPhone/iPad重获新生的iOS降级神器
  • 从流量入口到容器实例:图解 K8s Service、Endpoints 与 Pod 的联动机制
  • CAD文字样式设置教程:快速创建与修改步骤
  • 当 Jensen 不等式走进工业界:一个 AI 架构师视角的底层数学逻辑
  • 如何一键完成Windows系统激活:高效智能的完整解决方案
  • WechatDecrypt:三步快速解密微信聊天记录的完整指南