Kansoku
English日本語简体中文

抽出スキーマ

ページから何を取るかを書くための小さな記法。行の項目をまとめて保つ list 型を含みます。

単一の値

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

型は string number boolean string[] 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" }
    }
  }
}

なぜこれがあるか。 もう一方のやり方 ―― 列ごとに配列を1本返す ―― は、 すべてのカードがすべての項目を持っている間だけ正しいです。1枚のカードに価格が無いと、その配列だけが1つ短くなり、それ以降の組み合わせが全部ずれます。そしてこれはエラーになりません。実在する商品名と、実在する価格が並んだ表ができあがります。ただし別々の商品のものです。後工程では検出できません。

list なら、欠けた項目はそのレコードの中の null になり、前後の行はずれません。

selector はCSSの段では必須、構造化データの段では無視されます。後者は Product を型で探し、ItemList → itemListElement → item の入れ子の中も辿ります ―― 商品一覧を公開しているページの多くがこの形だからです。

数値

価格は文字列で届きます。number は通貨記号・空白・両方の区切り記法を扱います。 ¥1,234,500 $1,299.00 1.299,00 € 9 800 円

同じ区切り文字が2回以上出てきたら、それは桁区切りです。どの国の記法でも小数点が2つある表記は存在しません。 これは見た目より重要です。以前の実装は 1,234,500 をヨーロッパ式の小数と解釈して null を返していました。100万円を超える価格だけが静かに消え、それ以下は正常に解析されていました。

梯子

何をするか費用
css渡されたセレクタを読むなし
structured_dataサイトが既に公開している JSON-LD と OpenGraph を読むなし
llmページをモデルに説明させるトークン

段は列挙した順に走り、結果は統合されます。後の段は前の段が埋めなかった箇所だけを埋めます。["css", "structured_data"] を渡せば、モデルが呼ばれないことが保証されます。

空の配列は「値」ではなく「見つからなかった」として扱います。そうしないと、古くなったセレクタが0行を返した時点で梯子が止まり、同じページにある構造化データに出番が来ません。

最終更新