当前位置: 首页 > 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.gsyq.cn/news/1403085.html

相关文章:

  • 从LPCC到CQCC:三大语音特征提取算法原理与MATLAB实战解析
  • 关于用flex弹性盒子修饰网页
  • 量子计算在化学模拟中的应用与ADAPT-VQE技术解析
  • 借助Taotoken快速体验最新发布的旗舰模型如Qwen3.7
  • JSM2N60F 600V N 沟道功率 MOSFET
  • ChatGPT角色设定失效真相大起底(92%用户踩中的3个隐性陷阱+权威测试数据验证)
  • FMCW雷达相位噪声在线估计:片上人工目标与频域/时域算法详解
  • 长尾关键词优化策略在SEO中的核心作用与提升技巧
  • 5个步骤让你的Blender三角网格秒变规整四边形:QRemeshify实战指南
  • 对比直接使用厂商API体验Taotoken聚合路由的实际稳定性增益
  • LeetCode 补拙笔记 日期:2026.05.26 题目:48. 旋转图像
  • Claude Code 增强工具全攻略:Skills、MCP、Plugin 最佳搭配方案
  • 动态自适应混合容错调度:从故障预测到遗传算法资源优选
  • CAD文字样式设置教程:快速创建与修改步骤
  • 基于压缩感知与字典学习的中波红外计算光谱成像技术
  • 基于混合存储与屋顶线模型的资源高效DCNN FPGA加速器设计
  • 通过 Taotoken 的 Token Plan 套餐在长期开发中有效控制大模型使用成本
  • 低成本四足机器人腿部控制:从PID到计算力矩控制(CTC)的算法对比与实践
  • 当 Jensen 不等式走进工业界:一个 AI 架构师视角的底层数学逻辑
  • STM32无人机飞控完整指南:从零构建四轴飞行器控制系统的终极教程
  • 豆包回答问题错漏百出?AI真正适合做的,可能根本不是“替你思考”
  • C++工业级日志项目(三)日志格式化消息封装
  • 【ChatGPT时间管理黄金法则】:20年IT专家亲测有效的7大AI协同工作流
  • MathLive终极指南:2025年最完整的网页数学公式编辑器解决方案
  • DS4Windows终极配置指南:3步让PS4手柄在PC上完美运行
  • 为HermesAgent自定义配置Taotoken作为模型供应商
  • MTKClient终极指南:快速掌握联发科设备刷机与调试的完整教程
  • 混凝土裂缝高精度检测数据集 智慧工地巡检-混凝土裂缝数据集(有v5/v8/v11/v13/v26模型)/YOLO混凝土裂缝检测」
  • 无广告音乐播放器做好了
  • Windows版Claude_Code保姆级安装与配置教程