高度なウェブサイト操作とAPI

Apr 14, 2025

セクション4へようこそ!これまで静的コンテンツとJavaScriptレンダリングされたコンテンツのスクレイピング、そして複数ページサイトのナビゲーションについて学びました。今回は、APIとの直接対話、フォーム送信、認証、GraphQLなどの特殊なAPIなど、より複雑なシナリオに取り組みます。これらのテクニックは現代のウェブアプリケーションに取り組む上で非常に重要です。

1. APIドリブンのウェブサイト(第7章)

多くの現代のウェブサイトは、初期HTMLですべてのデータを読み込むわけではありません。代わりに、ページが読み込まれた後にJavaScriptを使用してバックエンドAPI(多くの場合はfetchXMLHttpRequestを使用)からデータを取得します。これらのサイトを効率的にスクレイピングするには、UIをバイパスしてこれらのAPIと直接対話することがしばしば必要です。

主要な概念:

  • APIリクエストの特定: ブラウザの開発者ツール(ネットワークタブ)を使用して、データを返すリクエスト(多くの場合XHR/Fetch)を見つけます。通常はJSON形式です。
  • APIの直接スクレイピング: APIエンドポイントを見つけたら、axiosやNode.jsの組み込みfetchなどのライブラリを使用して直接リクエストを行うことができます。これは通常、ブラウザ自動化よりも高速で信頼性が高いです。
  • ページネーションとパラメータの処理: APIはページネーション(pagelimit)、フィルタリング、ソートにクエリパラメータを使用することが多いです。スクレイピングスクリプトでこれらを理解し複製する必要があります。

チャレンジ(第7章): RESTful APIから動的に商品リストが読み込まれるECサイトをスクレイピングします。タスクは、このAPIと対話してページネーションを正しく処理しながら、すべての商品を取得することです。

_solved/chapter7/ディレクトリで直接APIスクレイピングを実演するリファレンス実装を確認してください。

2. フォームと認証(第8章)

価値のあるデータはログイン画面の後ろにあったり、複雑なフォームの送信が必要だったりすることがよくあります。例えば、第8章の旅行予約プラットフォームでは、主要機能にアクセスするために認証が必要です。目的地を検索したり(オートコンプリートを使用)、旅行日を選択したり(カレンダーウィジェットと対話)、フィルターを適用したり、結果を表示したり(ログインユーザーにのみ表示されるプレミアムリスティングを含む)するには、まずログインプロセスを自動化する必要があります。これには、フォームの処理、セッションクッキーの管理(再認証が必要なタイムアウトやCSRF保護を含む)、そして最終的に実際のユーザーのようにブラウザを制御して操作を実行することが含まれます。

主要な概念:

  • フォーム送信の自動化: PlaywrightやPuppeteerなどのツールを使用して、入力フィールドの入力、オプションの選択、ボタンのクリックを行い、フォーム(ログインフォーム、検索バー、フィルターコントロールなど)を送信します。
  • 認証の管理:
    • クッキーベース: 一度ログインすると、ブラウザコンテキスト(Playwright/Puppeteerによって管理)が後続のリクエストのセッションクッキーを自動的に処理することが多いです。
    • トークンベース(例:JWT): ログインし、トークン(多くの場合ローカルストレージやAPIレスポンスから)を抽出し、後続のAPIリクエストのヘッダー(例:Authorization: Bearer <token>)に含めます。
  • セッション管理: スクレイパー内の異なるページやアクション間でログイン状態を維持します。
  • 保護されたコンテンツへのアクセス: 認証後、ログインユーザーのみが利用できるページやデータにナビゲートしてスクレイピングできます。

チャレンジ(第8章): この章では複数のステップが関与します:サイトへのログイン、検索ページへのナビゲーション、フィルター付きの複雑なマルチパートフォームの入力、結果の抽出(ログイン時のみ表示されるプレミアムコンテンツを含む)、さらにはユーザーダッシュボードへの検索の保存などです。

3. GraphQL APIの操作(第9章)

GraphQLはREST APIに代わる人気の選択肢です。特定のクエリ言語を使用して、クライアントが必要なデータを正確にリクエストできます。

主要な概念:

  • GraphQLエンドポイント: 通常、単一のエンドポイント(例:/graphql/api/graphql)があります。
  • クエリ言語: 取得したいフィールドと関係を指定するGraphQLクエリを構築する必要があります。InsomniaやPostmanなどのツールはGraphQLスキーマの探索に役立ちます。
  • ミューテーション: データを変更するアクション(ログインやデータ送信など)に使用され、RESTのPOST/PUT/DELETEに似ています。
  • 認証: しばしばRESTAPIと同様にAuthorizationヘッダーを送信する必要があり、通常はログインミューテーション後に取得します。

チャレンジ(第9章): GraphQL APIを使用したサイトと対話します。タスクはログインミューテーションで認証し、GraphQLクエリを使用してチャレンジとユーザープロファイルに関する特定の構造化データを取得することです。

これらの高度なテクニックをマスターすることで、効果的にスクレイピングできるウェブサイトとデータの範囲が大幅に拡大します。常に責任を持ってスクレイピングし、ウェブサイトの利用規約を尊重することを忘れないでください。

スクレイピングを楽しんでください!