Beautiful-soup-beautiful-objects

提供:Dev Guides
移動先:案内検索

美しいスープ-美しいオブジェクト

BeautifulSoupプロジェクトの開始点は、BeautifulSoupオブジェクトです。 BeautifulSoupオブジェクトは、その作成に使用される入力HTML/XMLドキュメントを表します。

文字列またはファイルのようなオブジェクトをBeautiful Soupに渡すことができます。この場合、ファイル(オブジェクト)はローカルにマシンまたはWebページに保存されます。

最も一般的なBeautifulSoupオブジェクトは-

  • Tag
  • NavigableString
  • BeautifulSoup
  • コメント

等価性のためのオブジェクトの比較

美しいスープによると、2つのナビゲート可能な文字列またはタグオブジェクトは、同じHTML/XMLマークアップを表す場合は等しくなります。

次の例を見てみましょう。2つの<b>タグは、オブジェクトツリーの異なる部分に存在しますが、どちらも「<b> Java </b>」のように見えるため、同等に扱われます。

>>> markup = "<p>Learn Python and <b>Java</b> and advanced <b>Java</b>! from finddevguides</p>"
>>> soup = BeautifulSoup(markup, "html.parser")
>>> first_b, second_b = soup.find_all('b')
>>> print(first_b == second_b)
True
>>> print(first_b.previous_element == second_b.previous_element)
False

ただし、2つの変数が同じオブジェクトを参照しているかどうかを確認するには、次のコマンドを使用できます。

>>> print(first_b is second_b)
False

Beautiful Soupオブジェクトのコピー

タグまたはNavigableStringのコピーを作成するには、以下のようにcopy.copy()関数を使用します-

>>> import copy
>>> p_copy = copy.copy(soup.p)
>>> print(p_copy)
<p>Learn Python and <b>Java</b> and advanced <b>Java</b>! from finddevguides</p>
>>>

2つのコピー(元のコピーとコピーされたコピー)には同じマークアップが含まれていますが、2つは同じオブジェクトを表していません-

>>> print(soup.p == p_copy)
True
>>>
>>> print(soup.p is p_copy)
False
>>>

本当の唯一の違いは、extract()が呼び出されたかのように、コピーが元のBeautiful Soupオブジェクトツリーから完全に切り離されていることです。

>>> print(p_copy.parent)
None

上記の動作は、同時に同じスペースを占有できない2つの異なるタグオブジェクトが原因です。