Cheerioとは何ですか?
Scrapeless Scraping Browserは、クラウドブラウザでJavaScriptページをレンダリングし、その結果として得られるHTMLをCheerioなどのツールで解析できるようにします。
Cheerioは、HTMLおよびXMLを解析し、その結果得られたドキュメントをjQueryのようなAPIでクエリするためのJavaScriptライブラリです。主な仕事は、マークアップを検索、トラバース、変更できる構造に変えることです。Node.jsのスクレイパーでは、Cheerioは通常、すでに取得したHTMLからフィールドを抽出します。
ライブラリは視覚的なブラウザ環境を提供していません。スクリプト要素は、Cheerioが実行するプログラムではなく、ドキュメントの一部のままです。これにより、入力の選択が決定的になります:取得したいレコードは、普通のHTTPレスポンスから来たものでも、完了したブラウザワークフローから来たものでも、読み込むマークアップに存在しなければなりません。
CheerioがHTMLで何をするか
Cheerioはマークアップをノードに解析し、これらのノードを選択したり変更したりするためのメソッドを公開します。 チアリオのドキュメントモデル ブラウザのレンダリング、レイアウト、またはページスクリプトの実行なしに、馴染みのある選択および移動操作を提供します。セレクタは取得したいノードを記述し、メソッドはそれらのテキストや属性を読み取ります。
そのモデルは、記事アーカイブ、サーバー生成の製品リスト、公開ドキュメンテーション、保存されたHTMLスナップショットに適しています。繰り返しのコンテナを特定し、その子要素を辿り、各コンテナを1つの出力レコードに変換することができます。パーサーは、その操作を実行するためにページを表示する必要はありません。
Cheerioはドキュメントを変更し、結果をシリアライズすることもできます。これは制御されたコンテンツ変換に役立ちますが、抽出と書き換えはコレクター内で別々の活動であるべきです。欠落しているフィールドを調査する前にツリーを変更すると、ソースが値を省略したのか、あなたの変換によって削除されたのかを判断するのが難しくなるかもしれません。
文字列、バイト、またはURLを読み込む
Cheerio はいくつかのロードパスをサポートしており、正しい選択はマークアップの出所とエンコーディングが既知かどうかに依存します。通常のロードメソッドは文字列を受け入れます。Node.js はバイト、ストリーム、および URL ロードメソッドに必要な環境を Cheerio に提供します。
指定されたテキストが不足しています。翻訳してほしい具体的なテキストを提供してください。 Cheerioの読み込み方法 loadBufferをバイト、ストリームベースのローダー、URLを取得して解析するためのfromURLを含めます。これは、Cheerioがページを取得できないという一般的な主張が不正確であることを意味します。そのURLローダーはマークアップを取得できますが、依然としてブラウザにはならず、ページのJavaScriptを実行することはありません。
エンコーディングは、生のバイトを保存するための実用的な理由です。誤ったテキストデコーダが文字を置き換えてしまうと、後のパーサーは元のタイトルを信頼性高く再構築できなくなります。ソースエンコーディングが不確かな場合、抽出に使用される文字列を作成する前に、バイトとエンコーディング情報を検査できる入力パスを選択してください。
ルール: 1. 出力は翻訳されたテキストのみ — 説明や追加のコードフェンスは不要です。 2. Markdown/HTMLの構造(見出し、リスト、リンク、表)を正確に保持します。 3. @@CODEBLOCK_0@@ や @@INLINECODE_0@@ などのプレースホルダートークンを正確に維持します;翻訳、順序変更、結合、再フォーマットは決して行いません。 4. ``` コードフェンスを追加したり削除したりせず、通常のテキストをコードブロックにラップしないでください。 完全なドキュメントを断片と区別します。カードの断片は、必ずしも完全なHTMLページと同じ周辺構造を持つことを意図していない場合があります。パーサー生成のラッパーは、特定のルートを仮定するセレクタに影響を与えることがあります。APIから抽出された断片が偶発的に完全なドキュメントとして扱われないように、入力の契約を明示化します。
セレクタはレコードコンテナ内で最も効果的です
Cheerio セレクタは、フィールド選択が各繰り返しアイテムコンテナ内に留まると、より信頼性の高いレコードを生成します。1 つのエンティティを表すカードまたは行から始めて、次にそのタイトル、リンク、オプションフィールドを見つけます。これにより、アイテムがフィールドを欠いている場合でも、値の関係が保持されます。
The Cheerio セレクタ構文 タグ、クラス、属性、関係セレクタが含まれます。子孫セレクタはネストされたコンテンツにアクセスできますが、直接子セレクタは関係を制限します。最初にマッチを返す式ではなく、観察された構造に基づいて選択してください。
イラスト記事ディレクトリを考えてみましょう。いくつかのカードにはサブタイトルがあり、いくつかにはサブタイトルがありません。すべてのタイトルを1つの配列に、すべてのサブタイトルを別の配列に集めると、最初の欠落したサブタイトルの後でペアリングがずれてしまう可能性があります。各カード内で両方のフィールドを選択することにより、欠落した値が正しい記事に保持されます。
属性と構造的関係は、ソースの意味を持つものを優先してください。長い位置セレクタの連鎖は、現在のレイアウトを再現する可能性がありますが、出版社が別のカードを挿入した場合に失敗することがあります。セレクタは小さな名前付き抽出レイヤーに保持し、レコードを下流のコンシューマーに渡す前に必要なフィールドをチェックしてください。
テキスト、属性、リンクは異なる意味を持つ
テキストコンテンツ、シリアライズされたマークアップ、および属性値は異なる抽出出力です。テキストを読むことは子孫のテキストを結合できます。属性を読むことは、格納された値を返します。HTMLをシリアライズするとマークアップが保持されます。すべてのフィールドに1つの方法を使用するのではなく、スキーマに一致する表現を選択してください。
| フィールド | 優先表現 | 検証質問 |
|---|---|---|
| 記事のタイトル | 正規化されたテキスト | 周囲のラベルはタイトルの一部になりましたか? |
| 詳細住所 | 解決済みURL | どのページが基本アドレスを提供しますか? |
| 安定した識別子 | ソース属性または明示的ID | コレクション内でユニークですか? |
| リッチな説明 | 制御されたマークアップまたはプレーンテキスト | 出力消費者はマークアップを許可していますか? |
相対リンクは正しいベースに対して解決されなければなりません。リダイレクトされた場合、最終的な文書のアドレスは要求されたものと異なる場合があります。URLの解決は、次のように構造化されたルールに従います。 URL標準; 単純な文字列の連結は、ルート相対パス、クエリ、または親ディレクトリ参照の間違った位置を生成する可能性があります。
記事アーカイブのための実用的な抽出契約
記事アーカイブの抽出器は、全ディレクトリを処理する前に、受け入れられるページ、レコード境界、および出力フィールドを定義すべきです。見出しと詳細リンクを含む公共アーカイブを想像してください。これは、報告されたライブデータセットではなく、設計選択を示しています。
受け入れられたHTML文書から始めて、アーカイブコンテナを特定します。その中で、各エントリを特定し、タイトルとリンクを読み取ります。リンクを文書の基本アドレスで解決し、欠落しているカテゴリを欠如として保持します。アーカイブ外のナビゲーション見出しは、記事タイトルの要件を満たすべきではありません。
出力にはソースページと記事アドレスの両方を保持します。ソースページは発見が行われた場所を説明します; 記事アドレスは目的地を特定します。アーカイブが複数のページを使用する場合、ページを跨いで目的地を重複を排除しながら、予期しない重複を調査するために十分な系譜を保持します。
不可能な組み合わせのための検証ルールを設定します。カテゴリがあるがタイトルがないエントリは、広告またはセレクター変更を示している可能性があります。近くのテキストからタイトルを発明する代わりに、理由を付けて拒否またはフラグを立てます。抽出契約はフィールドレベルで不確実性を可視化すべきです。
メンテナンスのために、通常のエントリ、欠落カテゴリ、および予期しないネスティングをカバーする小さな許可されたHTML例のセットを保持します。セレクタを変更する際にはフィールド関係を比較します。重要なチェックは、各出力行が意図されたエントリを依然として代表するかどうかであり、選択されたノードの総数が unchanged であるかどうかではありません。
なぜCheerioは時々レコードを返さないのか
Cheerioは、読み込まれたツリーがあなたの選択に一致するノードを含まないときに、レコードを返さないことがあります。それは、セレクタが間違っているか、ページ構造が変更されたか、またはHTML がレコードを含まないことを意味します。どの説明が適用されるかを決定する前に入力を検査してください。
ブラウザのElementsパネルは、スクリプトが実行された後の現在のDOMを表示します。通常のHTTPレスポンスは、アプリケーションの初期シェルのみを含む場合があります。レンダリングされたページからセレクタをコピーすることは、それがレスポンスボディと一致することを証明するものではありません。情報が全く存在するかを確認するために、そのボディで既知のタイトルや識別子を検索してください。
レンダリングにも完了条件があります。ユーザーアクションの後にレコードが表示される場合、アクション前にキャプチャされたスナップショットは不完全です。重要な状態、たとえば、アーカイブリストが表示されるか、選択されたカテゴリが更新されることを定義してから、HTMLをCheerioに渡します。
Scrapeless Scraping BrowserでCheerioを使用する
Scrapeless Scraping Browserは、ページがJavaScriptまたはインタラクションを必要とする場合にブラウザ実行を提供します。アプリケーションは、ブラウザワークフローを通じて関連するレンダリングされた文書を取得し、そのスナップショットの決定論的な解析にCheerioを使用できます。
その Scrapelessクラウドブラウザ は取得を担当し、 Scraping Browserの紹介 はブラウザサービスを説明します。スキーマには、引き続き必須フィールド、URL処理、および明示的なレコード境界が必要です。管理されたレンダリングは、すぐ隣の価格やラベルがあなたのレコードに属するかどうかを決定しません。
関連する Cheerio抽出手順書 はHTML解析ワークフローを拡張します。実際にブラウザ実行が必要なページ周辺で Scrapelessの料金 を評価します。静的な文書は、初期のマークアップに完全なデータがすでに含まれている場合、よりシンプルな取得パスに留まることができます。
結論
Cheerioは利用可能なHTMLを構造化されたJavaScriptレコードに変換するための焦点を絞った選択肢です。正しい文書を与え、各エンティティ内のフィールドを選択し、欠落値およびソースアドレスを保持します。コンテンツがブラウザの動作に依存する場合、取得を最初に修正し、抽出契約を安定させてください。
パーサーが必要とするHTMLを取得する
ブラウザ実行が必要なページにはScrapeless Scraping Browserを使用し、その後Cheerioがあなたの抽出ルールを担当します。
今すぐ登録して、 $5の無料クレジット — クレジットカードは不要.
$5のクレジットを請求する →FAQ
Q: CheerioはjQueryと同じですか?
CheerioはjQueryのような選択および操作APIを提供しますが、ブラウザjQueryのようにライブページDOM内部で実行されるわけではありません。あなたはCheerioが解析する文書を明示的に読み込む必要があります。なじみのあるメソッド名は、レイアウト、イベント処理、またはJavaScript実行を意味するものではありません。
Q: Cheerioはページをダウンロードできますか?
Cheerioは、マークアップを取得して解析するNode.js環境内にfromURLローダーを提供します。他の読み込み方法は文字列、バイト、またはストリームを受け入れます。URL読み込みはHTTP取得操作のままであり、クライアントサイドアプリケーションコンテンツをレンダリングしません。
Q: なぜ私の抽出されたリンクは相対的なのか?
HTMLリンク属性は絶対URLではなく、相対リファレンスを含むことがあります。文書の正しい基本アドレスに対してそれを解決し、関連する場合にはリダイレクト後の最終アドレスを保持してください。URL-awareな解決なしに文字列を結合することでリンクを構築しないでください。
Q: CheerioはJavaScriptのウェブサイトを解析できますか?
Cheerioは、必要なコンテンツがそのマークアップに存在する限り、JavaScriptアプリケーションを含む任意のソースからマークアップを解析できます。欠落ノードを作成するためにアプリケーションを実行しません。初期レスポンスにデータが不足している場合は、まず関連するレンダリング状態を取得してください。