郭立 (leeguoo)

# agentにWebページのデータを取らせるために、3つの不器用な方法を試して、最後に1つだけ残した

ページ全体のHTMLを詰め込んでコンテキストを燃やす、1フィールドごとにfind/getを往復する、手書きのevalを書く。この3つのデータ取得方法を全部試したが、どれもしっくりこなかった。残ったのはchrome-useのsiteとextract。背後にある判断は同じだ。データ取得は一度の宣言的な評価であるべきで、命令的な往復の列ではない。この記事では実際の出力から両者の使い方、extractのschemaをどう書くのか(最初は私も間違えた)、そして取れない場面・使うべきでない場面を説明する。

2026年7月2日 · 記事 · 公開

このページの目次

agentにWebページのデータを取らせるために、私は前後ぜんごして3つの不器用ぶきよう方法ほうほうためした。

いちばん直接的ちょくせつてきなのは、ページ全体ぜんたいのHTMLをモデルにわたして自分じぶんませることだ。ちゅうくらいのページでも数万すうまんtokenになり、データをまだれていないのに、コンテキストをさき半分はんぶんほど使つかってしまう。モデルもよくぎょうちがえる。2つはCSSセレクターを自分じぶんき、1フィールドごとにfindを1かい、さらにgetを1かいするやりかただ。10えるフィールドなら10かいえる往復おうふくになり、おそくて冗長じょうちょうだ。3つはJSのeval手書てがきしてページにながんで実行じっこうすること。使つかえはするが、ページごとになお必要ひつようがあり、属性ぞくせい取得しゅとくも、複数値ふくすうち取得しゅとくも、すべて自分じぶん面倒めんどうることになる。

一周いっしゅうまわってのこったのは、chrome-useの2つのコマンドだ。既知きちのサイトにはsite任意にんいのページにはextract使つかう。背後はいごにある判断はんだんおなじで、データ取得しゅとくは1かいの**宣言的せんげんてき評価ひょうかであるべきで、命令的めいれいてき**な往復おうふくれつではない、ということだ。

1つのコマンドで実際にログイン済みのChromeからきれいなJSONを取得し、ページ全体のHTML、壊れたselector、アンチボット壁という3つの古い道が消されている

site:既知きちのサイトなら、セレクターを自分じぶんかない

chrome-useが認識にんしきしているサイトをひらくと、利用可能りようかのうなadapterがあると自動じどうしめしてくれる。

$ chrome-use open https://news.ycombinator.com
💡 site adapters for news.ycombinator.com — prefer these for structured data:
   hackernews/thread, hackernews/top

adapterは、特定とくていのサイトにけてあらかじめかれたデータ取得しゅとくロジックだ。HNのDOMがどんなかたちか、これまで何度なんどわったかをにする必要ひつようはない。

$ bash
chrome-use site hackernews/top --json

かえってくる1けんごとのデータは完全かんぜんで、タイトルだけではない。

$ json
{ "rank": 1, "title": "ZCode – Harness for GLM-5.2", "url": "https://zcode.z.ai/en",
  "author": "chvid", "score": 329, "comments": 258, "id": 48753715,
  "hn_url": "https://news.ycombinator.com/item?id=48753715" }

adapterの本当ほんとう価値かちは、「ページ構造こうぞうわる」という問題もんだいをあなたのがわからはなしてくれることだ。HNが改版かいはんされればadapterがそれにわせてなおされる。あなたのsite hackernews/topは1文字もじえなくていい。代償だいしょうは、対応たいおうするのが内蔵ないぞうされたサイトだけにかぎられることだ。まずchrome-use siteなにがあるかをればいい。

実際じっさいにつまずきやすいちいさなてんが2つある。データはもどのトップレベルではなく.data.result.postsにあるので、jqわせるなら完全かんぜんなパスを必要ひつようがある。もう1つ、chrome-useはstderrにバージョン通知つうちを1ぎょうす。それはstdoutのJSONには影響えいきょうしないが、完全かんぜんにきれいにしたいなら2>/dev/nullければいい。

extract:任意にんいのページには、セレクターschemaをわた

既製きせいのadapterがないサイトではextract使つかう。ここでまず誤解ごかいただしておきたい。私も最初さいしょ間違まちがえたが、これは「しいものを自然言語しぜんげんご説明せつめいする」ものではない。わたすのはCSSセレクターのschemaだ。

{
  "rows": "<css>",           // rowsがある:反復コンテナ → 配列を返す。ない → ページ全体に対して1つのオブジェクトを返す
  "fields": {
    "name": ".title",                          // 短縮形:セレクター → trim後のテキスト
    "href": { "sel": "a", "get": "@href" },    // 属性を取得
    "tags": { "sel": ".tag", "get": "text", "all": true }  // 一致したものを全部取得 → 配列
  }
}

getにはtext(デフォルト)/ @属性 / html / value指定していできる。HNのトップページからかく項目こうもくのタイトルとリンクをるなら、ぎょうコンテナは.athingだ。

$ bash
chrome-use extract --schema '{"rows":".athing","fields":{"title":".titleline a","url":{"sel":".titleline a","get":"@href"}}}'
$ json
[ { "title": "ZCode – Harness for GLM-5.2", "url": "https://zcode.z.ai/en" },
  { "title": "Oomwoo, an open-source robot vacuum you build yourself", "url": "https://makerspet.com/blog/..." } ]

rowsかなければ、ページ全体ぜんたいたいして1つのオブジェクトをかえす。h1link[rel=canonical]のようなページ単位たんいのフィールドをるのにいている。

もう一段いちだんふかかんがえる価値かちがあるのは、その実行方法じっこうほうほうだ。schema全体ぜんたい1かいのページ評価ひょうかにコンパイルされる。まえのように1フィールドごとに往復おうふくするわけではない。10えるフィールドでも1かいもどせる。はやく、挙動きょどう確定的かくていてきだ。おなじschemaをおなじページにてれば、結果けっか安定あんていして再現さいげんできる。ここが、データ取得しゅとくにおいて宣言的せんげんてきなやりかた命令的めいれいてきなやりかたよりあつかいやすい理由りゆうだ。構造こうぞう記述きじゅつすれば、あとは1かい計算けいさんしてくれる。セレクターのかたがわからないなら、まずsnapshot -i構造こうぞうるか、DevToolsで対象たいしょう要素ようそをクリックしてselectorをればいい。

れないもの、そして使つかうべきでないもの

単一たんいつコンテナモデルにもとどかない場合ばあいがある。HNのスコアは.athingぎょうにはなく、すぐつぎぎょう.sublineにある。そのため、うえれいではタイトルとリンクだけがれている。「1けんのデータが2ぎょうのDOMにかれている」構造こうぞうでは、rows/fields仕組しくみだけでは全部ぜんぶれない。まさにこれがadapterの存在理由そんざいりゆうだ。site hackernews/topはすでに2ぎょう結合けつごうしてくれている。

ぎゃくに、そもそもブラウザをひらくべきでない場面ばめんもある。公開こうかいされた静的せいてきページの数個すうこのフィールドなら、curl + jqのほうがはやい。「どんなページがあるか」をりたいなら検索けんさくエンジンを使つかうべきだ。extract / site本当ほんとう主戦場しゅせんじょうは、ログインが必要ひつようで、JSを実行じっこうする必要ひつようがあり、アンチボットにめられるページだ。chrome-useが操作そうさするのは、あなたがその時点じてんでログインしている本物ほんもののChromeだからだ。それらのデータはもともとまえにレンダリングされている。chrome-useは、画面がめんにあるものをJSONとしてっているだけだ。CreepJS実測じっそくしたbotスコアは0%。偽装ぎそうしているからではなく、それがもともとあなたのブラウザだからだ。

データ取得しゅとくむずかしいのは、解析かいせきそのものではない。解析かいせきできる段階だんかいまでまず到達とうたつすることだ。前半ぜんはんのログイン、レンダリング、検出けんしゅつ通過つうかはあなた自身じしんのブラウザにまかせる。後半こうはんでは、siteみのレコードをわたし、extractが1つのセレクターで一度いちどにきれいにらせてくれる。

← 前の記事
agent にブラウザを選ぶ:Playwright 系と chrome-use は同じものではない
次の記事 →
デスクトップアプリは実はWebページだ:これを理解すると、操作はもはや「デスクトップ自動化」ではなくなる

コメント

コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。

最大 1000 文字。