BeautifulSoupとは?
Scrapeless Web Unlockerは、BeautifulSoupを解析層として使用するPythonプログラムのために、公開ページのHTMLを返すことができます。
要約
- BeautifulSoupは、HTMLとXMLを解析するためのPythonライブラリです。 マークアップをナビゲート可能なツリーとして表示します。
- BeautifulSoupはページを取得したり、JavaScriptを実行したりしません。 別のコンポーネントがマークアップを提供する必要があります。
- パーサーのバックエンドがツリーに影響を与えます。 不正な文書が重要な場合は、バックエンドを選択し、固定してください。
- セレクタにはレコード境界が必要です。 1つのアイテム内でのスコープフィールドの検索と、必要な値の検証を行います。
BeautifulSoupは、通常beautifulsoup4パッケージからbs4としてインポートされ、マークアップをタグ、属性、およびテキストのツリーに解析します。Pythonコードはそのツリーを検索し、親や兄弟を横断し、選択された要素から値を抽出できます。これは、HTMLページを単なる文字列として扱うのではなく、構造化されたコンテンツとして読むのに役立ちます。
ライブラリには明確な境界があります。自分自身でHTTPリクエストを行うことはなく、スクリプトタグを解析してもスクリプトを実行しません。HTTPクライアント、ローカルファイル、またはレンダラーがHTMLを提供する必要があります。その後、結果の品質は、取得した表現と、それに対して書いたセレクタの両方に依存します。
BeautifulSoupがマークアップをツリーに変換する方法
パーサーはマークアップを読み取り、要素とテキストのノードを作成します。BeautifulSoupはそれらのノードをタグとナビゲート可能な文字列として公開し、階層を移動するためのメソッドやプロパティを提供します。 公式のBeautiful Soupドキュメント 検索メソッド、CSSセレクタ、属性、ツリーのナビゲーションを説明します。ツリーは提供されたマークアップのモデルであり、ライブブラウザDOMではありません。
記事ラッパー、見出し、リンク、価格スパンを持つ製品カードを想像してください。BeautifulSoupは記事を見つけ、その後、フィールドのためにその記事内だけを検索することができます。これにより、値の関係が保持されます。価格がない場合、カードはオプションフィールドが欠落している1つのレコードのままとなり、以降の価格が間違ったタイトルと組み合わされることはありません。
パーサーはコメント、スクリプト、隠れたマークアップも公開できます。コンテキストを理解せずにテキストノードをすべて選択すると、ナビゲーション、法律通知、または埋め込まれたデータが結果に含まれる可能性があります。意味のあるコンテナから始めて、小さなスキーマを書くことが重要です。良いセレクタは、どのページ構造が取得したいレコードを表すかに関する声明です。 HTTP表現モデル は、パーサーを信頼する前に、受け取ったボディとそのメタデータを確認することを思い出させてくれます。
パーサーバックエンドと不正なHTML
BeautifulSoupはパースをバックエンドに委任します。Pythonの組み込みhtml.parserはすぐに利用可能ですが、他のバックエンドには異なるインストール要件と回復動作がある場合があります。無効なネスト、閉じタグの省略、異常な文書フラグメントは、異なるパーサーの下で異なるツリーを生成する可能性があります。コード内でバックエンドを固定し、インストールされているパーサーに依存するのではなく、代表的なソースマークアップに対してテストしてください。
Pythonの html.parserリファレンス は、低レベルのイベント駆動インターフェースについて説明します。BeautifulSoupは、選択したパーサーの上に高レベルの検索およびナビゲーションレイヤーを提供します。この違いは、特定の不正な文書について理由を考える必要があるプロジェクトにとって重要です:バックエンドを切り替えると、タグの親が変わり、スコープされたセレクタが変わる可能性があります。
ブラウザは自分自身のパースルールの下でHTMLを修正し、その後JavaScriptがDOMを再度変更できるようにします。そのため、BeautifulSoupが生のレスポンスを解析すると、ブラウザ実行後にキャプチャされたスナップショットとは異なるツリーが生成される可能性があります。セレクタを非難する前に、パーサーに渡された正確な入力を、開発者ツールで検査したマークアップと比較してください。
Find、Find All、およびCSS選択
findは検索スコープの下で最初の一致する要素を返し、find_allは一致を返します。selectはツリーにCSSセレクタを適用し、select_oneは1つの一致する要素を返します。質問を明確に表現する形を選択してください。シンプルなタグと属性の条件は、findでより良く読むことができる可能性があります。カード内のアンカーのような関係は、CSSセレクタとして読む方が良いかもしれません。
セレクタは短くて有意義であるべきです。意味のある記事タグ、安定したデータ属性、または知られた見出し関係は、生成されたクラスチェーンよりも壊れにくい傾向があります。アイテムが複数のリンクを持つ可能性がある場合は、最初のアンカーを取るのではなく、スキーマに対する役割が一致するリンクを特定してください。アンカーテキストと目的地の両方を調査します。相対的なhrefを最終ページのURLに対して解決し、壊れたレコードが出力されないようにします。
テキスト正規化は別の操作です。get_textは子孫のテキストを収集できますが、間隔や隠れたコンテンツを見直す必要があります。正確な句読点、単位、または通貨が重要な場合、元の文字列を保存します。分析のためには正規化された表示値を使用します。selectの結果はノードのリストであり、自動的に有効なデータセットではありません。
リンクを選択する際には、表示テキストと目的地を区別してください。カードには、異なるターゲットを持つナビゲーションリンク、画像リンク、アクションリンクが含まれる場合があります。レコードキーに対応するものを選択し、最終ページのURLに対して解決し、ホストまたはパスを検証します。ページにcanonicalリンクがある場合、すべてのカードのhrefがすでにcanonicalであると仮定しないでください。生のhrefと正規化されたURLを保持することで、後のソース変更を診断しやすくなります。
BeautifulSoupができないこと
BeautifulSoupはページをJavaScriptを実行させたり、ブラウザセッションを開いたり、コントロールをクリックしたり、ネットワーク応答を待ったりすることはできません。最初のHTMLにターゲットレコードが欠けている場合、ライブラリはその不完全な文書を忠実に解析します。まず、適切な構造化エンドポイントにデータが含まれているかを確認してください。そうでなければ、ブラウザ対応のパスを使用してレンダリングされたHTMLを取得します。
ウェブ Web Unlocker JS Renderドキュメント はHTMLを返すことができるブラウザ実行オプションを説明しています。BeautifulSoupは、その後、返されたマークアップを解析できます。この作業の分担は役に立ちます:取得はアクセスとレンダリングを解決し、Pythonパーサーはフィールドの選択と正規化を担当します。レンダリングされた結果が期待されるページ状態に達したことを確認する必要があります。
解析されたツリーは、コレクションが許可されているかどうかを判断することもできません。サイトの利用規約、プライバシー義務、運用負荷は周囲のワークフローに属します。また、レコードレベルの受け入れルールなしに、価格が現在のものであるか、タイトルが正しい製品タイトルであるかを決定することもできません。パーサーを構造のためのツールと考え、ビジネスの真実を保証するものとは見なさないでください。
信頼できるBeautifulSoupワークフロー
まず、出力フィールドと必要なページマーカーを定義します。許可されたページを取得し、最終URL、ステータス、およびメディアタイプを確認し、ボディのサンプルを調べます。次に、明示的なパーサーでスープを作成します。レコードコンテナを選択し、各コンテナ内のフィールドを読み取ります。値を正規化し、URLを解決し、必要なフィールドを検証し、拒否された項目を記録します。利用ケースにトレーサビリティが必要な場合、ソースコンテキストで受け入れられたレコードを保存します。
繰り返しの抽出のために、2つのチェックを保持します。パーサーレベルのテストは、保存された代表的なマークアップを使用してセレクタを検証します。小さなライブ取得チェックは、現在のページがまだ期待されるアイデンティティと構造を返すことを確認します。パーサーテストのみが合格した場合、新しいログイン壁や変更された応答が本番ジョブを空にしてしまう可能性があります。フィールドチェックなしでライブテストのみが合格した場合、そのジョブは静かに間違った値を保存することができます。
パーサー出力も明示的な制限が必要です。非常に大きなボディや深くネストされた不正なマークアップを持つページは、驚くべき時間とメモリを消費する可能性があります。取得層で合理的な応答サイズの制限を設定し、スコープされた要素が十分な場合は、全ページのテキストを収集しないようにします。これにより、パース段階の予測可能性が保たれ、ソースページが期待される形状を超えたときに明確な診断が残ります。
ウェブ Web Unlocker製品ページ は公共ページの取得を説明し、関連する BeautifulSoupガイド は静的および動的取得の選択肢を説明しています。パーサーをシンプルに保つためにそれらの選択肢を使用します:適切なHTMLを受け取り、検証されたレコードを返すべきで、ページがその状態に達する方法を推測すべきではありません。
結論
BeautifulSoupはHTMLまたはXMLパースツリーへの実用的なPythonインターフェースです。その強みは、すでに供給されたマークアップからの検索、遍歴、および抽出にあります。パーサーバックエンドを選択し、レコードに対してスコープセレクタを設定し、結果のデータセットを信頼する前にページ取得パスを検証してください。
HTML取得をPython解析に接続する
文書化されたScrapeless取得パスを使用し、1つの確認された応答を小さなレコードスキーマに解析します。
今日サインアップして $5の無料クレジットを入手し — クレジットカードは不要です.
あなたの$5クレジットを請求する→FAQ
BeautifulSoupはウェブブラウザですか?
いいえ。BeautifulSoupは提供されたマークアップをナビゲート可能なツリーに解析します。スクリプトを実行したり、ライブページを管理したり、コントロールをクリックしたりはしません。ブラウザやレンダラーは別の取得コンポーネントです。
BeautifulSoupはURLを取得しますか?
いいえ。マークアップを最初に取得するには、HTTPクライアント、ローカルファイル、またはレンダリングサービスを使用してください。コンテンツをBeautifulSoupに渡す前に、応答が意図したページであることを確認してください。
どのBeautifulSoupメソッドを使用すべきですか?
タグと属性のクエリにはfindまたはfind_allを使用し、CSSスタイルの構造クエリにはselectまたはselect_oneを使用します。レコードの境界を明確にし、代表的なマークアップに対してテストできるメソッドを選択してください。
パーサーの選択が結果を変えることはありますか?
はい。バックエンドは不正なHTMLを異なる方法で修復でき、異なる親子関係を生成します。選択したパーサーを固定し、ワークフローが実際に受け取るページの種類に対してセレクタをテストしてください。
BeautifulSoupはレンダリングされたHTMLを解析できますか?
はい。ブラウザ対応のコンポーネントが最終HTMLスナップショットを提供した後、BeautifulSoupはそれを解析できます。自らレンダリングを行わず、ワークフローはスナップショットが意図した状態を含むことを確認する必要があります。