如何在不混淆价格和 SKU 的情况下抓取产品变体
Scrapeless Agent Browser 让你在受管浏览器会话中检查动态产品页面及其已选定的变体状态。
摘要
- 变体身份必须和价格一起传递。 在同一条观测记录中写下选项组合和来源变体标识符。
- 产品最低价是一种发现值。 它并不能为每个尺码或颜色建立报价。
- 选中状态需要一个可观察的完成条件。 点击后立即读取可能会捕获到上一个选项。
- 覆盖不完整时需要一个显式状态。 一个可访问的产品响应并不能证明所有变体都已返回。
管线概览:保持报价边界
变体抽取管线会发现产品、枚举有效选项、为每个变体收集一条报价、验证关联关系并存储一条观测记录。关联关系比是否存在价格字段更重要。一个被完美解析但附在错误尺码上的金额依然是不正确的数据。
使用产品族来归类相关商品,使用变体标识符来区分可购买的配置,并使用报价记录来表示变化的商业事实。该 ProductGroup 模型 将共享的产品特征与变体区分开来。你自己的数据表可以使用不同的名称,同时保持这种边界。
对于定价应用,将成功定义为已确认的产品、已确认的变体、金额、货币、市场和观测时间。空白 SKU 是可以合法存在的。不确定的变体与价格映射应当阻止该记录参与告警或重新定价。该 变体级价格监控管线 展示了这些观测在更大应用中的位置。
前提条件:定义“变体”的含义
在收集之前,先整理一份经批准的产品监测清单、允许的访问方式、目标市场以及预期的选项维度。当这些字段会改变被购买的商品时,要包括尺码、颜色、材质、包装数量、成色或订阅选择。文档化说明哪些属性用来标识变体,哪些属性用来描述其报价。
你还需要一个适配实际店面的抽取器、一个用于保存观测结果的存储位置,以及一套包含棘手产品的复查集。要包括只带一个选项的产品、存在不可用组合的产品,以及价格会随选项变化的产品。本文定义的是抽取契约;它并不声称提供通用选择器或实时商家导出。
将 SKU 值按文本存储,包括前导零。按来源或商家为每个标识符建立命名空间。商家可能会重复使用一个 SKU、将其留空或对其进行修改,因此仅凭 SKU 不适合作为全局产品键。当前端暴露来源变体 ID 时,要保留该 ID。
第 1 阶段:在不扁平化变体的情况下发现产品
产品发现应当在产生变体报价之前,先产生父级 URL 和来源标识符。列表卡片可能展示起始价格、价格区间、分期金额或促销信息。将这些字段保留在发现记录中,直到产品级检查建立它们的含义为止。
当公开的结构化响应或稳定的产品链接包含所需信息时,优先使用它们。嵌入的结构化数据有助于识别产品,但要检查它描述的是一个已选报价还是整个变体集合。该 Product vocabulary 支持描述性标识符;标记的存在并不保证其完整性或新鲜度。
保留编码已选变体的查询参数。仅在确认它们不会影响产品状态后,才移除跟踪参数。将原始 URL 与规范产品 URL 一起保留,以便源证据可复现。一个在缩短过程中丢失所选尺码的 URL 会让正确记录无法复查。
第 2 阶段:枚举有效组合
变体枚举应当遵循店面实际支持的组合。对所有可见选项直接取笛卡尔积会凭空造出从未存在的配置。颜色选择可能会改变可提供的尺码,而套餐选择可能会改变产品身份,而不只是改变价格。
构建一个包含变体 ID、选项名称、选项值和发现状态的枚举表。如果某个结构化来源返回了显式变体,就使用这些记录作为组合的初始清单。将这份清单与代表性产品上可见的控件进行对比。对响应被截断、隐藏选项以及无法解释的差异进行标记以便复查。
当只有界面暴露组合时,每次选择一条选项路径并捕获结果身份。将不受支持的组合与一个当前不可用但已存在的变体分开记录。这两种情况回答的是不同问题:前者描述目录,后者描述当前报价。
第 3 阶段:同时读取身份与价格
抽取步骤应当从同一个已稳定的页面状态中读取已确认的变体身份及其报价。使用 Agent Browser时,你的自动化会控制与店面的交互。浏览器提供渲染后的访问;你的采集器仍然需要决定所选选项何时就绪,以及哪个节点属于该报价。
在选择某个选项之后,等待产品特定的标记:变体 ID 发生变化、已选选项文本更新,或与请求变体相匹配的标识符关联的价格元素。使用有上限的等待时间。仅仅是加载动画消失,可能比标识符和金额一同变化要弱。
将价格抽取限定在主产品购买区域。将当前价格、对比价格、分期文本和订阅价格保存在不同字段中。该 Offer 模型 提供了在一个商品与其提供条件之间作出有用区分的方法。切勿用无关的推荐卡片覆盖普通购买价格。
| 字段 | 含义 | 验证决策 |
|---|---|---|
| source_variant_id | 店铺本地变体标识 | 当所选来源暴露该字段时必填 |
| sku | 商家分配的库存编码 | 可为空文本;切勿单独作为全局关联键 |
| options | 具名选项组合 | 必须与所选变体匹配 |
| price_amount 和 currency | 一次观测到的报价 | 当数量单位或货币未解析时先保留 |
| coverage_status | 枚举完整性 | 保持部分集合可区分 |
阶段 4:在入库前测试变体映射
在记录进入最新价格表之前,验证应拒绝重复的变体观测和缺失的货币上下文。下面的本地 Python 示例使用了特意构造的输入;它检查的是映射契约,而不是去采集真实店面。请将示例记录替换为来自你获批提取器的观测数据。
这两个示例变体同属一个产品,但各自保留自己的 SKU 和金额。重复检查会使用来源、父产品、变体和市场。某个不可用的报价仍可能显示价格,因此可用性是独立字段,而不是复制其他变体金额的理由。
# Illustrative records; no merchant data is represented.
rows = [
dict(source="demo", product="coat", variant="blue-s", market="GB",
sku="001-S", amount="45.00", currency="GBP"),
dict(source="demo", product="coat", variant="blue-m", market="GB",
sku="001-M", amount="49.00", currency="GBP"),
]
seen = set()
for row in rows:
key = tuple(row[k] for k in ("source", "product", "variant", "market"))
assert key not in seen, "duplicate variant observation"
assert row["amount"] and row["currency"], "incomplete monetary context"
seen.add(key)
print([(r["variant"], r["sku"], r["amount"]) for r in rows])阶段 5:保留历史并诊断错误关联
只追加的观测历史使变体错误可被诊断。保留请求的选项、观测到的选项、提取方法、原始价格文本、规范化金额、货币、捕获时间以及指向许可证据的引用。最新视图表可以为应用提供服务,而无需替换底层观测记录。
在调查突然的价格变化时,先检查身份再检查金额。所选选项是否被重置?区域设置是否更改?某个订阅开关是否启用?由这些条件造成的差异属于上下文变化,不一定代表同一报价的价格波动。
对结构化值与渲染值相互矛盾的情况使用审核队列。应优先使用事先声明的来源优先级,而不是默默采用先解析到的任何一个值。请根据 Scrapeless 定价 与每条经验证报价所需的工作量进行比较,包括你需要的交互与证据,而不是只按父页面数量来预算。
结论:让变体关联显式化
若要可靠抓取产品变体,请将发现过程与报价采集分离,并在每一次转换中保持身份绑定。真正有用的输出是一组具有明确覆盖范围且可被论证的变体观测。先从一个窄的监控清单开始,验证困难的选项组合,只在映射通过与店面手动比对后再进行扩展。
构建你的产品变体抓取工作流
将上述采集与验证决策应用到你用 Scrapeless 获批的电商来源上。
立即注册即可获得 $5 免费额度 — 无需信用卡.
领取你的 $5 额度 →常见问题
问:一个产品的最低价能代表所有变体吗?
除非来源确认各变体报价完全相同,否则一个产品的最低价不能代表所有变体。将该最低价作为产品摘要存储,并分别采集各变体金额。此区分可防止某个便宜尺码改变所有其他尺码的价格历史。
问:应如何处理空的 SKU?
将空 SKU 保持为 null,并在可用时保留其他来源的变体标识。不要从标题中“制造”库存编码。如果无法建立身份,请保留该观测以供审核,而不是将其金额附加到一个猜测出来的变体上。
问:浏览器会话是否需要代理?
代理需求取决于被允许观测的来源与市场。国家路由可以支持一致的市场上下文,但应核实店面实际选定的国家与货币。仅靠路由并不能确保所请求的变体或本地报价处于激活状态。
问:当页面布局发生变化或出现挑战时会怎样?
布局变更或访问挑战应产生的是抽取状态,而不是猜测的价格。先确认产品区域,检查稳定标识符,并修改受影响的抽取器。将挑战内容排除在报价表之外,并检查数据源的访问条件。
问:这能在没有 AI agent 的情况下运行吗?适合的并行度是多少?
确定性的自动化可以在没有 AI agent 的情况下执行变体工作流。使用受限的按主机 worker 池,并根据允许的流量和观测到的网站行为来选择其规模。以保守值起步,而不要把云端容量当成目标站点的流量许可。
问:公开的变体数据是否可以不受限制地采集?
仅有公开可见性并不能决定许可或再利用权利。在采集前,请审查商家的条款、适用要求以及获批的监控范围。将任务聚焦在公开的产品信息上,排除仅限账号访问或受限目录的数据。