Beautiful-soup-kinds-of-objects

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

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

htmlドキュメントまたは文字列をbeautifulsoupコンストラクターに渡すと、beautifulsoupは基本的に複雑なhtmlページを別のpythonオブジェクトに変換します。 以下では、4つの主要な種類のオブジェクトについて説明します。

  • Tag
  • NavigableString
  • BeautifulSoup
  • コメント

タグオブジェクト

HTMLタグは、さまざまなタイプのコンテンツを定義するために使用されます。 BeautifulSoupのタグオブジェクトは、実際のページまたはドキュメントのHTMLまたはXMLタグに対応します。

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<b class="boldest">finddevguides</b>')
>>> tag = soupl
>>> type(tag)
<class 'bs4.element.Tag'>

タグには多くの属性とメソッドが含まれており、タグの2つの重要な機能は名前と属性です。

名前(tag.name)

すべてのタグには名前が含まれており、サフィックスとして「.name」を介してアクセスできます。 tag.nameは、タグのタイプを返します。

>>> tag.name
'html'

ただし、タグ名を変更すると、BeautifulSoupによって生成されたHTMLマークアップにも反映されます。

>>> tag.name = "Strong"
>>> tag
<Strong><body><b class="boldest">finddevguides</b></body></Strong>
>>> tag.name
'Strong'

属性(tag.attrs)

タグオブジェクトは、任意の数の属性を持つことができます。 タグ<b class =” boldest”>には、値が「boldest」である属性「class」があります。 タグではないものは基本的に属性であり、値を含む必要があります。 属性にアクセスするには、キーにアクセスする(上記の例の「クラス」にアクセスするなど)か、「。attrs」から直接アクセスします。

>>> tutorialsP = BeautifulSoup("<div class='tutorialsP'></div>",'lxml')
>>> tag2 = tutorialsP.div
>>> tag2['class']
['tutorialsP']

タグの属性にはあらゆる種類の変更を加えることができます(追加/削除/変更)。

>>> tag2['class'] = 'Online-Learning'
>>> tag2['style'] = '2007'
>>>
>>> tag2
<div class="Online-Learning" style="2007"></div>
>>> del tag2['style']
>>> tag2
<div class="Online-Learning"></div>
>>> del tag['class']
>>> tag
<b SecondAttribute="2">finddevguides</b>
>>>
>>> del tag['SecondAttribute']
>>> tag
</b>
>>> tag2['class']
'Online-Learning'
>>> tag2['style']
KeyError: 'style'

多値属性

HTML5属性の一部は複数の値を持つことができます。 最も一般的に使用されるのは、複数のCSS値を持つことができるクラス属性です。 その他には、「rel」、「rev」、「headers」、「accesskey」、「accept-charset」などがあります。 美しいスープの多値属性がリストとして表示されます。

>>> from bs4 import BeautifulSoup
>>>
>>> css_soup = BeautifulSoup('<p class="body"></p>')
>>> css_soup.p['class']
['body']
>>>
>>> css_soup = BeautifulSoup('<p class="body bold"></p>')
>>> css_soup.p['class']
['body', 'bold']

ただし、属性に複数の値が含まれているが、HTML標準の任意のバージョンによる多値属性ではない場合、美しいスープは属性をそのままにします-

>>> id_soup = BeautifulSoup('<p id="body bold"></p>')
>>> id_soup.p['id']
'body bold'
>>> type(id_soup.p['id'])
<class 'str'>

タグを文字列にすると、複数の属性値を統合できます。

>>> rel_soup = BeautifulSoup("<p> finddevguides Main <a rel='Index'> Page</a></p>")
>>> rel_soup.a['rel']
['Index']
>>> rel_soup.a['rel'] = ['Index', ' Online Library, Its all Free']
>>> print(rel_soup.p)
<p> finddevguides Main <a rel="Index Online Library, Its all Free"> Page</a></p>

「get_attribute_list」を使用すると、複数値であるかどうかに関係なく、常にリスト、文字列である値を取得できます。

id_soup.p.get_attribute_list(‘id’)

ただし、ドキュメントを「xml」として解析した場合、多値属性はありません-

>>> xml_soup = BeautifulSoup('<p class="body bold"></p>', 'xml')
>>> xml_soup.p['class']
'body bold'

NavigableString

navigablestringオブジェクトは、タグのコンテンツを表すために使用されます。 コンテンツにアクセスするには、タグ付きの「.string」を使用します。

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, finddevguides!</h2>")
>>>
>>> soup.string
'Hello, finddevguides!'
>>> type(soup.string)
>

文字列を別の文字列に置き換えることはできますが、既存の文字列を編集することはできません。

>>> soup = BeautifulSoup("<h2 id='message'>Hello, finddevguides!</h2>")
>>> soup.string.replace_with("Online Learning!")
'Hello, finddevguides!'
>>> soup.string
'Online Learning!'
>>> soup
<html><body><h2 id="message">Online Learning!</h2></body></html>

BeautifulSoup

BeautifulSoupは、Webリソースをスクレイピングしようとしたときに作成されるオブジェクトです。 それで、それは私たちがかき集めようとしている完全な文書です。 ほとんどの場合、タグオブジェクトとして扱われます。

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, finddevguides!</h2>")
>>> type(soup)
<class 'bs4.BeautifulSoup'>
>>> soup.name
'[document]'

コメント

コメントオブジェクトは、Webドキュメントのコメント部分を示します。 これはNavigableStringの特別なタイプです。

>>> soup = BeautifulSoup('<p><!-- Everything inside it is COMMENTS --></p>')
>>> comment = soup.p.string
>>> type(comment)
<class 'bs4.element.Comment'>
>>> type(comment)
<class 'bs4.element.Comment'>
>>> print(soup.p.prettify())
<p>
<!-- Everything inside it is COMMENTS -->
</p>

NavigableStringオブジェクト

navigablestringオブジェクトは、タグ自体ではなく、タグ内のテキストを表すために使用されます。