JavaScriptによるウェブスクレイピング
Scrapeless Agent Browserは、パブリックページがレンダリングされた状態やインタラクションを必要とする場合に、JavaScriptオートメーション用のクラウドブラウザ接続を提供します。
TL;DR
- JavaScriptスクレイピングには2つの取得パスがあります。 フィールドが存在する場合には応答HTMLをフェッチして解析し、ページコードが後でフィールドを生成する場合にはレンダリングします。
- Node.jsフェッチは応答を取得しますが、ページをレンダリングしません。 パーサーまたはブラウザは別のコンポーネントです。
- セレクターは1つのレコードにスコープを持つべきです。 生成されたクラスチェーンよりも、安定した属性と意味的関係を維持する方が容易です。
- ページネーションと検証には明示的な停止ルールが必要です。 ユニークなキー、次のリンク、および受け入れられたレコードを追跡します。
JavaScriptを使用したウェブスクレイピングとは、許可されたウェブ表現を取得し、選択されたフィールドをレコードに変換することです。Node.jsでは、フェッチがHTMLをダウンロードでき、パーサーがそれをクエリできます。ブラウザコンテキストでは、ページスクリプトが実行され、オートメーションが結果のDOMを読み取ることができます。これらのパスは同じ言語を使用しますが、異なる機能、コスト、および失敗信号があります。
1つのパブリックページと小さなスキーマから始めてください。レコードコンテナ、1つの必須フィールド、1つのオプションフィールド、および安定した識別子を特定します。初期応答を表示されるページと比較します。それから、実際にそれらのフィールドを含む取得パスを選択します。チュートリアルの残りの部分は、ソースが変更されたときに選択、ページネーション、および出力を誠実に保つことに焦点を当てています。
セレクターを書く前にページを分類する
ブラウザの開発者ツールを使用して最初のドキュメント応答を検査し、ターゲット値を検索します。値が生のHTMLに現れる場合、Node.jsのフェッチとHTMLパーサーが機能します。値がスクリプトが実行された後にのみ現れる場合、許可された構造化ネットワーク応答と結果のDOMを検査します。JavaScriptファイルを含むページは自動的にクライアントレンダリングデータソースではありません; 関連する質問は、特定のフィールドがどこで利用可能になるかです。
その Node.jsグローバルフェッチドキュメント はHTTPリクエストインターフェースを説明しています。解決されたフェッチ呼び出しは、レンダリングされたブラウザドキュメントではなく、Responseオブジェクトを提供します。テキストを読む前にresponse.ok、最終URL、およびContent-Typeを確認してください。アクセスポリシー通知またはログインページは有効なHTMLである可能性があるので、セレクターを実行する前に、意図されたページに属するマーカーをテストしてください。
迅速な取得のメモにはターゲットURL、期待される見出し、ソースレイヤー、レコードキー、および許可されるナビゲーションの名前を付ける必要があります。そのメモは、サイトが変更されたときのデバッグ支援となります。それがないと、空の配列を印刷するスクリプトは、ネットワークが失敗したのか、パーサーが間違ったセレクターを選んだのか、ブラウザが意図された状態に到達しなかったのかを判断できません。
DOM指向ライブラリで静的HTMLを解析する
Cheerioのようなパーサーは、マークアップをクエリ可能な構造に読み込みます。その 公式紹介 は、CSSスタイルのトラバースを説明し、CheerioがJavaScriptを実行しないことを明確にしています。まずレコードコンテナを選択し、次に各コンテナ内のタイトル、リンク、およびオプションフィールドを選択します。これにより、1つのレコードがフィールドを欠いていても関係が維持されます。
例えば、パブリックリストはarticle[data-item-id]をコンテナとして使用することができます。属性からIDを読み取り、その記事内のh2を見つけ、最終応答URLに対してそのアンカーハッシュを解決します。テキストをホワイトスペースで圧縮して正規化しますが、意味を捕捉するまで通貨記号や単位を削除しないでください。フィールドが欠けている場合は、明示的なnullを出力するか、別のアイテムの値をその場所にシフトするのではなく、スキーマの下でレコードを拒否してください。
セレクターロジックの開発用のリアルな許可されたHTMLのサンプルを保持します。これにより、パーサーの変更を安価にテストできます。ただし、フィクスチャーだけでは現在の取得を検証しません; ページのアイデンティティとフィールド数に対して小さなライブチェックを実行します。HTTPエラーとパーサーの失敗を独立して報告することにより、両方の段階を区別します。
必要な場合にのみレンダリングしてインタラクトする
ターゲットフィールドがブラウザの実行後にのみ存在する場合、ブラウザオートメーションセッションは、ナビゲートし、ターゲットを待機し、結果のDOMを読み取ることができます。固定の遅延ではなく、コンテンツ特有のロケータを使用します。 Playwrightロケータガイダンス は、ロケータが要素を特定し、アクション可能な状態を待機するのをどのようにサポートするかを説明します。ロケータはまだページの実際のマークアップから選ばれなければなりません。
その エージェントブラウザのスタートガイド は、サポートされているオートメーションフレームワーク用のクラウドブラウザ接続を文書化しています。ワークフローがブラウザ実行またはアクションのシーケンスを必要とする場合に便利です。ブラウザへの接続が正しいデータセットを保証することを暗示しないでください: ページはシェル、同意通知、またはアクセス状態をレンダリングできます。ナビゲーション後にルートとターゲットレコードを検証します。
ページがスクロール時により多くのレコードを読み込む場合、現在のユニークキーのセットをキャプチャし、1つの制限されたアクションを実行し、新しいキーまたは明示的な終了信号を待機します。文書化されたまたは観察された継続が終了するまで停止します。固定回数を盲目的にスクロールすると、データを見逃したり、データを繰り返したり、有用なコレクションが完了した後もスクリプトが実行され続けることがあります。
ページネーションとレコード形状を処理する
確認された次のリンク、ページパラメータ、またはカーソルには、ソースの実際のナビゲーションモデルに属している場合のみ従います。リンクを最終ページURLに対して解決し、意図された範囲外の宛先を拒否します。訪問したページのセットと別のレコードキーのセットを保持します。最初のセットはナビゲーションループを防ぎ、2番目のセットはページ間の повторアイテムを検出します。
スケールで収集する前に出力を定義します。単純なレコードには、ソースURL、アイテムID、タイトル、宛先URL、観察価格テキスト、観察時間が含まれる場合があります。必須フィールドは欠落していると検証に失敗します。オプションフィールドはnullableである必要があります。解釈が後で見直される可能性がある場合は、正規化された値の横に生のテキストを保存します。パーサーの成功信号はデータ品質の信号ではありません。
ソースの変更を観察可能にします。訪問したページ数、選択されたレコード、受け入れられたレコード、重複キー、欠落した必須フィールド、予期しないページアイデンティティをカウントします。ソースが200ステータスのアクセスページを返し始めた場合、アイデンティティチェックはストレージを停止する必要があります。マークアップが変更されてもページが正しいままであれば、セレクターミスのカウントは抽出レイヤーを指します。
ワークフローを管理可能で責任あるものに保つ
プロジェクトがアクセスを許可されたコンテンツのみを扱います。サイトの利用規約、プライバシー義務、能力ガイダンスを確認します。並行性とリクエストボリュームに制約をかけます。クライアントサイドコードに資格情報を埋め込んだり、アクティブセッションクッキーを例に公開したりしないでください。同じ承認されたデータをより明確な契約で提供する場合は、文書化されたAPIを優先してください。
その Agent Browser製品ページ は、管理されたブラウザサーフェスについて説明します。関連する Node.jsスクレイピングガイド は、軽量HTML解析とレンダリングページの作業を比較します。これらは、すべてのページをブラウザで実行する理由ではなく、1つの抽出契約の下にある2つの取得選択肢として扱います。
定期的なスクレイプをスケジュールする前に、各レイアウトバリエーションから1つの代表的なページをテストします。削除された応答の証拠を保存し、フィールドレベルの主張を書き、収集されたデータをどのくらい保持するかを決定します。適切にスコープされた小さなワークフローは、単一のトータル行数の背後に隠された広範なクロールよりも監査が容易です。
リストにスポンサー付きカード、ナビゲーションモジュール、通常の結果が含まれている場合、それらが視覚的なクラスを共有していても、別々の構造として扱います。レコードセレクターは、どの要素が望ましいアイテムと見なされるかを明示する必要があります。各候補を受け入れる前に、1つの安定した属性または宛先パターンをチェックしてください。この小さな分類ステップにより、プロモーションブロックが見出しとリンクを含むだけで製品レコードに変わるのを防ぎます。
結論
JavaScriptによるWebスクレイピングは、取得パスがソースと一致する場合に機能します。完全な応答HTMLを取得して解析します。ブラウザが生成した状態のためだけにレンダリングします。セレクターのスコープを定義し、レコードスキーマを定義し、実際の継続ルールに従い、意図されたページに到達したことを証明できない応答を拒否します。
JavaScriptスクレイピングワークフローを構築する
1つの許可されたターゲットを選択し、生のHTMLが不完全な場合に適切なScrapelessブラウザパスに接続します。
今すぐサインアップして $5の無料クレジットを獲得 — クレジットカードは不要です.
$5のクレジットを請求する→FAQ
JavaScriptはブラウザなしでスクレイプできますか?
はい。Node.jsはHTMLまたは許可された構造化エンドポイントを取得し、返されたコンテンツを解析できます。対象がブラウザの実行または対話に依存する場合にのみ、ブラウザが必要です。
fetchはページのJavaScriptを実行しますか?
いいえ。FetchはHTTP応答を取得します。ページDOMを作成したり、ダウンロードしたスクリプトを実行したり、コントロールをクリックすることはありません。返されたHTML用のパーサーまたはスクリプトが作成する状態用のブラウザ環境を使用してください。
Cheerioとブラウザの違いは何ですか?
Cheerioは提供されたマークアップを解析し、ページスクリプトを実行せずにDOMのような選択をサポートします。ブラウザはスクリプトを実行し、ページの状態を管理し、コントロールと対話できます。ターゲットフィールドが表示される場所に応じて選択してください。
スクレイパーは変化するCSSクラスをどのように扱うべきですか?
意味的要素、安定したデータ属性、および各レコード内の短い関係を優先してください。必要なフィールドを検証し、セレクターミスを監視して、再設計が静かに不完全な出力を生むのではなく、明示的な失敗をもたらすようにします。
すべてのJavaScriptスクレイパーにプロキシは必要ですか?
いいえ。ネットワークルーティングとJavaScriptレンダリングは異なる条件に対処します。ターゲットアクセスパターンと許可されたワークフローがそれを要求する場合にのみ、プロバイダがサポートするプロキシ設定を使用してください。データがどこから来るかを最初に確立してください。