BeautifulSoup4のNavigableStringオブジェクトについて

みなさまおはこんばんにちは、せなです

今回はBeautifulSoup4で使用されているNavigableStringオブジェクトについて説明したいと思います

NavigableStringについて

BeautifulSoup4ではタグの間の文字列などをNavigableStringオブジェクトとして使用しています

以下のコードはNavigableStringオブジェクトとBeautifulSoupオブジェクトの見本です

soup = BeautifulSoup('<p>Beautiful Soup</p>', 'html.parser')

print(soup.string)
# Beautiful Soup

print(type(soup.string))
# <class 'bs4.element.NavigableString'>

print(soup)
# <p>Beautiful Soup</p>

print(type(soup))
# <class 'bs4.BeautifulSoup'>

NavigableStringオブジェクトの文字列を直接操作したい時には「extract()」メソッドや「replace_with()」メソッドを使用することで変更することができます

(NavigableStringオブジェクトは多くのメソッドには対応していません、Tagオブジェクトに関係したメソッドではほとんどの場合は「AttributeError」などが発生します)

soup = BeautifulSoup('<p>Beautiful Soup</p>', 'html.parser')

soup.string.replace_with('Navigable String')
print(soup)
# <p>Navigable String</p>

tag_string = soup.string.extract()
print(tag_string)
# Navigable String

NavigableStringオブジェクトをBeautifulSoupの外で使用する時には「str()」メソッドなどでStringなどに変換して使用します
(NavigableStringオブジェクトをそのまま使用していると、BeautifulSoupのパースを保持し続けるため、メモリを大きく消費します

soup = BeautifulSoup('<p>Beautiful Soup</p>', 'html.parser')

str_soup = str(soup.string)
print(type(str_soup))
# <class 'str'>