Kansoku
English日本語简体中文

本页由英文原文翻译,尚未经母语者校对。以英文版为准。 阅读英文原文

抽取模式

描述从页面上取什么的一套小型写法,包含把一行的各字段绑在一起的 list 类型。

单个值

{ "title": "string", "price": "number", "in_stock": "boolean" }

类型有 stringnumberbooleanstring[]number[]。只写类型时,结构化数据层会按名称去找该字段。要精确指定就给一个选择器:

{ "price": { "type": "number", "selector": ".price", "attribute": "content" } }

列表

列表页是「行」,不是「列」。 请照这样去要它。

{
  "listings": {
    "type": "list",
    "selector": ".product-card",
    "limit": 100,
    "item": {
      "name":  { "type": "string", "selector": "h2 a" },
      "price": { "type": "number", "selector": ".price" },
      "url":   { "type": "string", "selector": "h2 a", "attribute": "href" }
    }
  }
}

为什么需要它。 另一种做法 —— 每列返回一个数组 —— 只在每张卡片都带有全部字段时才是对的。 一张卡片缺了价格,那一个数组就短一位,之后所有的配对全部错位。而这不会报错:你会得到一张由真实商品名和真实价格组成的表格,只不过它们分属不同的商品。下游无法检测出来。

list,缺失的字段是该条记录内部的一个 null,前后各行依然对齐。

selector 在 CSS 层是必需的,在结构化数据层会被忽略 —— 后者按类型查找 Product 节点,包括嵌套在 ItemList → itemListElement → item 里的, 因为大多数发布商品列表的页面正是这个结构。

数值

价格以文本形式到达。number 能处理货币符号、空格,以及两种分隔符习惯: ¥1,234,500$1,299.001.299,00 €9 800 円

同一个分隔符出现两次以上,它就是千分位 —— 任何地区的写法都不存在两个小数点。 这比看上去更重要:早前的实现把 1,234,500 当作欧式小数并返回 null, 结果是一百万以上的价格全部悄悄消失,而低于这个数的都正常解析。

阶梯

做什么费用
css读取你提供的选择器
structured_data读取站点已经公布的 JSON-LD 与 OpenGraph
llm把页面描述给模型token

各层按你列出的顺序执行,结果会合并:后一层只填补前面留空的部分。 传入 ["css", "structured_data"],即可保证不会调用模型。

空数组算作「没找到」,而不是一个值。 否则一个失效的选择器返回 0 行就会让阶梯停下,同一页上的结构化数据永远轮不到。

最后更新