ある資産形成の連載特集を読んでいて、No.1 から No.16 まで全部ある構成だと気づいた。 1本ずつブラウザで開いて読むのは骨が折れる。そこで agent-browser に全16記事を巡らせて、まとめて1本の記事に統合してもらうことにした。
結論から言うと、16本ぶんの無料公開範囲を全部集めて、共通パターンを抽出した1本のまとめが手元に残った。
ただし途中で wait --load networkidle が接続タイムアウトで止まり、別タブを拾う事故も起きた。回避しながら16本を取り切るまでの記録を残しておく。
やりたかったこと
- 一覧ページに並ぶ連載記事(No.1〜16、URLは連番)を全部開く
- 各記事の本文を取得して、横断的に要約・統合する
- 16人ぶんのプロフィールと共通点を1枚にまとめる
記事本文をそのまま転載するのは著作権的にアウトなので、あくまで「全記事を取得して要約・統合する」というワークフローのレベルで進めた。 出来上がったまとめも、テーマ(資産形成や投資の入口、暴落との向き合い方)という一般的な切り口でぼかしてある。
進め方
最初に一覧ページを agent-browser で開き、記事へのリンクを抜き出した。 URLが連番だったので、16本ぶんのアドレスはここで全部揃った。
# 一覧ページを開いてリンクを集める
agent-browser open "https://finance.yahoo.co.jp/feature/special/list/millionaire"
agent-browser eval 'Array.from(document.querySelectorAll("a")).map(a => a.href)'
あとは16本を順に開いて本文を取るだけ……のはずだった。ここから2つの壁にぶつかる。
壁その1:networkidle が返ってこない
1記事目を開いて本文を取ろうとしたら、いきなりタイムアウトで落ちた。
✗ Failed to read: ... (os error 10060)
agent-browser open ... && wait --load networkidle && eval のチェーンで、networkidle の待機が成立しないまま接続が切れていた。
対象サイトは広告やトラッキングで常時ネットワークが動いているらしく、「ネットワークが静かになる瞬間」が永遠に来ない。
リトライする前にルールどおり issue を立てて、原因と回避策を書き残した。
回避は単純で、networkidle をやめて load 待ちか固定待機に切り替えるだけ。
# networkidle をやめて固定待機に逃がす
agent-browser open "https://finance.yahoo.co.jp/feature/special/okuribito001.html"
agent-browser wait 2000
agent-browser eval 'document.body.innerText'
これで本文は取れるようになった。issue にも「networkidle を避けて wait --load load か固定待機を使う」と解決策を残してある。
壁その2:別タブの記事を拾う
本文が取れたと思ったら、中身がまったく別サイトの記事になっていた。
現在ページのURLを確認すると about:blank で、複数タブが混在していた。open したタブと eval が走るタブがずれていたわけだ。
ここはセッションを固定して、open した直後の同じチェーンの中で本文まで取り切る方式に変えて解決した。
タブを跨がせないことが肝で、--session で固定してから一気通貫で抜くと安定した。
壁その3:そもそも続きが読めない
16本を集める途中で、この連載が有料会員限定だと判明した。 無料で取れるのは各記事の「リード文+現在の資産状況+投資を始めた頃のエピソード」までで、本文の核心は会員ページの向こうにある。
ここは欲張らず、無料で読める範囲だけを16本ぶん集める方針に切り替えた。 プロフィール・資産額・投資の入口・きっかけは無料範囲に揃っていたので、まとめの素材としては十分だった。
コンテキスト汚染を避ける小細工
16本ぶんの本文を全部コンテキストに載せると重い。malformed で会話が落ちるリスクもある。 そこで取得した本文は逐一ファイルに書き出し、ノイズ(ナビ・フッター・関連記事)を除いた集約版を1ファイルにまとめてから、それだけを読んで全体を把握した。
実際この日も tool call malformed を2回踏んでいる。
本文の塊を引数に詰め込みすぎないよう、取得→ファイル保存→集約という流れに分けたのは正解だった。
進捗管理
16本という数になると、どこまで取れたか分からなくなる。 進捗メモをチェックボックスで持って、取得・集約・ドラフトの段階を可視化しながら進めた。
- 一覧ページから16記事のURL・タイトルを取得
- agent-browser で16記事すべての無料公開範囲を収集(16ファイルに保存)
- ノイズ除去した集約版を1ファイルに作成
- 16人の一覧表+共通点の分析を含むまとめドラフトを作成
- 数字・固有名詞の最終チェック(取材時点と更新時点で資産額がずれている記事あり)
- 公開先・形式の最終決定
まとめでわかったこと
無料範囲だけでも、16人を横に並べると共通パターンがくっきり出た。
- 投資の入口は「持株会」か「株主優待」のどちらかに集中していた
- 暴落(リーマンショック、震災)を「恐怖」ではなく「仕込み場」として動いた人が多い
- 危機感(就職難、ブラック企業からの脱出)が原点になっているケースが目立つ
1本ずつ読んでいたら気づきにくい横串の共通点が、16本を一気に並べたことで見えた。 これは agent-browser に全記事を巡らせて1枚に集約させた効果だと思う。
学び
networkidleは万能ではない。広告だらけのサイトでは永遠に成立しないので、loadか固定待機に逃がす- agent-browser はタブが混ざる。
--sessionで固定して、open から eval まで同じチェーンで取り切る - 大量取得は逐一ファイルに落とす。コンテキストに塊を載せると malformed で落ちる
- 16本のような数物は、進捗をチェックボックスで持つと「どこまで取れたか」で迷わない
判断とぼかし方は人間が握り、ページを巡って本文を抜く泥仕事は agent-browser に任せる。 この切り分けが、16本という数を現実的な時間で1本にまとめる鍵だった。