凌晨三点,你的爬虫又挂了。线上部署的Headless Chrome突然内存溢出,CSS选择器失效,反爬系统升级——你对着监控面板骂了一句,开始改代码。这一幕在巴西电商圈每天都在上演。成千上万的开发者为了从Americanas、Submarino这些大站抓商品数据,跟反爬系统斗智斗勇。
但这个仗根本就不该打。VTEX——这套支撑了巴西绝大部分头部电商的平台——一直开着大门?你不必费劲解析页面结构、管理代理IP、处理验证码,只要发送一个HTTP请求,就能拿到完整的商品目录数据。这条路存在很久了,只是知道的人出奇地少。
这篇文章把VTEX公开目录API的原理、关键参数、价格字段里的历史坑,以及它在竞品价格监控这个场景下的优势,全部拆解出来。如果你还在用浏览器自动化抓VTEX店铺的数据,看完这篇,你的爬虫代码至少能删掉一大半。
VTEX为每个店铺提供了一个不需要密钥、不需要登录的REST接口,跟店铺前台用的是同一套。想要搜Americanas上的“笔记本”,一行命令就够了:把店铺域名拼进这个固定路径,加上搜索关键词,返回的就是结构化的商品数据——没有JavaScript渲染,没有反爬检测,也不需要HTML解析器。
这套接口支持全文搜索、分页取数、排序切换和精确过滤。搜索参数直接对应前台搜索框的行为。分页用的是索引窗口机制,每次最多拿50条记录,下次请求把起始索引往后推50位就行。排序方式覆盖了按价格升降序、按销量降序、按上架日期降序这些常见需求。如果你已经知道商品ID,跳过全文搜索直接用结构化过滤就行,还能按品类和品牌筛选。
有个细节让很多初次接入的人踩坑:成功拿到分页数据时,服务器返回的是HTTP 206状态码,而不是200。206在这里代表部分内容,是VTEX分页机制的正常响应,不是报错。响应头里会标明当前返回的索引区间和数据总量。判断逻辑很简单:200和206都按成功处理,当返回条数少于窗口大小时,说明数据已经取完了。
真正考验细节的地方在价格字段。每个商品下面有多个SKU,每个SKU对应不同颜色或尺寸的变体,每个变体下面又挂着一组卖家——VTEX店铺本质上是平台型电商,同一个SKU可能由不同商家供货。价格数据就藏在卖家对象里,字段名写的是“commertialOffer”,注意这个拼写:commerce少了个c,多加了t。
这个拼写错误从接口诞生起就没改过。不是VTEX没人发现,而是一旦修正,所有已经接入的系统都会出错。这条规则很简单:代码里照着这个错误的拼写去读,读不到就换正确拼写的开发者,永远找不到价格数据。
价格对象里有三个关键数字:当前实际售价、划线价、未打折的原价,外加一个库存数量。在平台模式下,同一个SKU可能对应多个卖家的报价,那个划线价也只是单个卖家自己标出的参考价,不是跨店铺的比价结果。这两个坑都是实际项目里反复出现的问题。
这套接口最直接的应用场景就是竞品价格监控。你不需要维护页面解析规则,不用担心对方改了前端框架,也不用对抗反爬策略。只要拼好请求地址、处理好分页逻辑、正确解析价格字段,就能持续稳定地获取对手的商品目录和价格信息。
VTEX撑起了巴西电商的半壁江山,但它给每个店铺留的这条数据通道,用的人远比你想象的少。下次有人问你怎么监控竞品价格,你可以告诉他:别折腾爬虫了,翻翻VTEX的接口文档,那里有现成的。
热门跟贴