「スクレイピングスクリプトをClaude Codeに書かせると実際どうなるか」を試した記録だ。5分で書けると書いたタイトルは誇張ではなくて、最初のスクリプトが動くまでの時間は本当に5分だった。ただし「完成」するまでには少しかかった話も含めて書く。

最初に出したプロンプト

目的は、特定のECサイトの商品一覧ページから、商品名・価格・在庫状況を取得してJSONで保存するスクリプトだ。

最初のプロンプトはこうした。

以下のページから商品情報をスクレイピングするPuppeteerスクリプトを書いてください。
取得する情報:
- 商品名(.product-title クラスの要素)
- 価格(.price クラスの要素、数値のみ抽出)
- 在庫状況(.stock-status クラスのテキスト)

結果はoutput.jsonに保存してください。
ページが完全に読み込まれてからスクレイピングするようにしてください。

URLは実際には伏せているが、Claudeはこの指示から完全なPuppeteerスクリプトを生成した。

生成されたコードの品質

Claude Codeが生成したスクリプトは、最低限動くレベルとして十分だった。以下の要素が含まれていた。

headlessブラウザの起動・ページナビゲーション・指定セレクターでの要素取得・テキストの整形・JSONファイルへの書き出し・エラーハンドリング(try-catch)。

エラーハンドリングまで自動で書いてくれるのは良かった。ゼロから書く場合、エラー処理を後回しにしがちなのでここで節約できた。

修正が必要だった箇所

そのまま実行すると2つの問題が出た。

一つ目は、ページのローディング待機方法の問題だ。生成されたコードはpage.waitForSelectorを使っていたが、対象サイトはJavaScriptで動的にコンテンツをレンダリングしていて、セレクターが存在しても中身が空の状態が続くことがあった。networkidle2での待機に変えたらこの問題は解決した。

二つ目は価格の数値抽出の正規表現だ。Claudeは/[\d,]+/で数値を取り出すコードを書いたが、対象サイトの価格表示に「¥」や「税込」という文字が混在していて、期待通りに数値が取れない場合があった。正規表現を/[\d,]+(?=円)/に修正して解決した。

修正はClaude Codeに「このコードで数値が取れないケースがある」と伝えてコードを見せたら、修正案をすぐに返してくれた。自分で正規表現を考える必要がなかった点は評価できる。

ページネーション対応を追加する

一覧ページが複数ページに分かれている場合の対応も依頼した。

「このスクリプトに、次のページへのボタン(.pagination .next クラス)をクリックして全ページ分取得する機能を追加してください」と伝えると、ループ処理と終了条件を含んだコードを追加で書いてくれた。

ページネーションの終了判定は「.nextボタンが存在しなくなったら終了」というシンプルな実装で、サイトの構造によっては動かないケースもあるが、基本パターンとして正しい実装だった。

Claude Codeでのスクレイピング依頼のコツ

試してわかったのは、プロンプトにCSSセレクターやサイトの構造情報を含めるほど、生成コードの精度が上がるという点だ。「なんとなくスクレイピングして」という指示より「このセレクターの要素を取得して」という具体的な指示の方が、修正回数が減る。

対象サイトのHTMLをブラウザの開発者ツールで確認して、主要なセレクターを把握してからClaude Codeに依頼するのが効率的なフローだ。

動的なJavaScriptレンダリングを使うサイトか、静的なHTMLだけのサイトかによって実装が変わる点も最初に伝えると良い。前者は「Puppeteerでheadlessブラウザを使う」、後者は「Cheerio+Axiosで十分」という使い分けをClaude Codeが自動で判断してくれるようになる。

完成までにかかった時間

実際の作業時間を振り返ると、最初のスクリプト生成まで2分、最初の動作確認と問題発見まで5分、修正(2回)とページネーション追加まで合計15分程度だった。

同じものをゼロから書くなら1〜2時間はかかっていた。作業時間の削減効果は大きく、特にスクレイピングのような「パターンは決まっているが書くのが面倒」という作業にClaude Codeは向いている。