動的 Web スクレイピング入門
Web スクレイピングでは Web サイトからデータを抽出しますが、これは頻繁に変更される動的コンテンツでは特に困難になります。専門家の Greg、Dario、Diego から、Puppeteer、Selenium、Playwright などのツールを使ってこれらの課題を克服するための、実践的なアドバイスを提供してもらいました。
Greg: サンフランシスコを拠点とする Greg は Andela 社に所属し、従来のソフトウェアエンジニアリングと Web スクレイピングを専門としています。
Dario: アルゼンチン出身の Dario は Mabel 社に所属し、ローコードの QA 自動化ツールに注力し、PuppeteerSharp と Playwright の .NET バージョンに貢献しています。
Diego: スペインのバレンシアにいる Diego は、Selenium プロジェクトのリーダーであり、クラウドテストプラットフォームである Sauce Labs のオープンソースリーダーでもあります。
主なトピック
1.HTML の変更への対応
Greg は、信頼できるセレクターを選ぶことの重要性を強調しました。div > div > p
のようなハードコーディングされたセレクターの長いチェーンは避け、代わりに、aria-label
などのより安定したセレクターや、テキストベースのセレクターを使用します。さらに、DOM よりも変更される可能性が低いため、可能な場合は API 要求をインターセプトします。
ツールとテクニック:
- Mozilla の可読性: 複雑な HTML をクリーンで読みやすい形式に変換します。
- API インターセプト: データのエンドポイントに直接アクセスして、DOM の変更を回避します。
2.クライアント側ルーティングとシングルページアプリケーション (SPA) のナビゲート
Dario は、SPA の処理について解説しました。SPA ではクライアント側ルーティングが頻繁に使用されるため、データの抽出が厄介です。主なポイント:
- 初期の読み込みを信頼しない: 複数のチェックを行って、ページが完全に読み込まれていることを確認します。
- コンテキストをチェックする: タイトルやその他の安定した要素を検証して、多段階プロセスの正しい段階にあることを確認します。
- ツール: Playwright や Puppeteer のナビゲーションや待機機能を有効に使います。
3.非同期に読み込まれたデータへのアクセス
Diego は、Java の Selenide や JavaScript の WebDriverIO など、同期を自動的に処理するフレームワークの使用を推奨しています。このようなフレームワークは組み込みのメソッドが提供されているため、要素が読み込まれるまでの待機が簡単になります。
ヒント:
- イベント駆動型述語:
waitForFunction
を使用して DOM の特定の状態を待ちます。 - 要求のインターセプト: 可能な場合は API 応答を直接キャプチャして処理します。
4.遅延読み込みに対するユーザー操作の模倣
Greg が、ページを操作するとコンテンツが読み込まれる遅延読み込みに対処するためのテクニックを紹介しました。主な戦略:
- キーボード操作: ページダウンキーを使用して読み込みを開始します。
- データの段階的なキャプチャ: スクリプトが失敗してもデータが失われないように、チャンクに分けて保存します。
- 可能な限りユーザー操作を避ける: API 応答を直接インターセプトして、ユーザーアクションの必要性を避けます。
5.Shadow DOM コンポーネントからの情報の抽出
Dario が、Web ページの一部をカプセル化してスクレイピングしにくくする、Shadow DOM への対処方法を説明しました。主なポイント:
- オープン Shadow DOM とクローズ Shadow DOM について: ほとんどのツールがオープン Shadow DOM にアクセスできますが、クローズ Shadow DOM の場合はそうはいきません。
- 手動による JavaScript 処理:
shadowRoot
プロパティを使用して Shadow DOM 内の要素に手動でアクセスします。 - フレームワークのサポート: Playwright や Puppeteer のようなツールは Shadow DOM を効果的に処理します。
6.ページ全体のスクリーンショットのキャプチャ
Diego は、ページ全体のスクリーンショットに Firefox を使用することを推奨しています。Firefox にはこの目的のためのネイティブコマンドがあるためです。Selenium を Chrome デベロッパーツールプロトコルに統合するのも有効な手段です。
ヒント:
- ネットワークのアイドル状態: スクリーンショットをキャプチャする前に、すべての要素が読み込まれていることを確認します。
- 組み込みのメソッドの使用: Puppeteer の
FullPage
オプションなどのツールを使うことで、プロセスが簡素化されます。
7.大規模運用
Jacob が、フィンガープリントの管理、セッション処理、IP ローテーションなどの、Web スクレイピングのスケーリングに関する課題について解説しました。彼は Bright Data のスクレイピングブラウザを紹介しました。これにより、これらの複雑な処理が不要になり、開発者がスクリプティングに集中できるようになります。
主な機能:
- セッション管理: 検出されないように自動的にセッションを処理します。
- IP ローテーション: さまざまな IP アドレスを使用して多様なユーザーをシミュレートします。
- テスト用のプレイグラウンド: スケールアップする前に、制御された環境でスクリプトをテストできます。
対話式の質疑応答セッション
ウェビナーの最後には質疑応答セッションが設けられ、参加者が Web スクレイピングのさまざまな側面について質問しました。主なトピック:
- フロントエンド API 呼び出しのインターセプト: ブラウザのデベロッパーツールを使用して API 要求を識別し、複製します。
- 強力なセレクター: XPath の使用は避け、代わりにより安定していて信頼性の高いセレクターを使用します。
- 認証の処理: 認証トークンをキャッシュし、必要に応じて二要素認証を手動で処理します。
まとめ
このウェビナーは、動的 Web スクレイピングの習得を目指す開発者に豊富な知識を提供しました。Greg、Dario、Diego が共有した情報を活用することで、スクレイピングのテクニックを磨き、スクリプトをより強力で効率的なものにすることができます。ライブセッションを見逃した方のために、録画版がまもなく公開されます。Web スクレイピングやデータ抽出に秀でるために役立つ、Bright Data の今後のトレーニングコンテンツにご期待ください。
ハッピースクレイピング!