BeautifulSoup4のタグオブジェクトの使い方

2019年12月11日

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

今回はBeautifulSoup4のタグオブジェクトの使い方について説明したいと思います

BeautifulSoup4の基本的なスクレイピングの方法について知りたいという方は以下の記事を参考にしてください

リンク:BeautifulSoup4の基本的な使い方

始めに

BeautifulSoup4は基本的に以下の4つのオブジェクトを操作して処理を行います

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

その中から今回はタグオブジェクトの使い方を説明していきます

タグオブジェクトとは

タグオブジェクトは取得したHTMLやXMLのタグに対応しています
Beautiful Soupのオブジェクトの中で最も重要で基本的なオブジェクトです

soup = BeautifulSoup('<div class="main_content"></div>', 'html.parser')
tag = soup.div
print(type(tag))
----結果----
<class 'bs4.element.Tag'>

タグオブジェクトの使い方

タグ名の変更

タグオブジェクトは.nameを使うことでタグ名を変更することができます

soup = BeautifulSoup('<div class="main_content">せなブログ</div>', 'html.parser')
tag = soup.div
print(tag)
tag.name = 'p'
print(tag)
----結果----
<div class="main_content">せなブログ</div>
<p class="main_content">せなブログ</p>

タグ属性の変更

タグオブジェクトのタグ属性は辞書と同じ構造をしていますので
tag[‘class’]または.attrsを使うことでタグ属性へ簡単にアクセスできます

soup = BeautifulSoup('<div class="main_content">せなブログ</div>', 'html.parser')
tag = soup.div
print(tag['class'])
print(tag.attrs)
----結果----
['main_content']
{'class': ['main_content']}

タグ属性は辞書と同じ構造なのでdictを使う時と同じようにタグの追加・変更・削除ができます

soup = BeautifulSoup('<div class="main_content">せなブログ</div>', 'html.parser')
tag = soup.div
# 追加
tag['id'] = 'sub'
print(tag)
# 変更
tag['class'] = 'sub_content'
print(tag)
# 削除
del tag['class']
del tag['id']
print(tag)
----結果----
<div class="main_content" id="sub">せなブログ</div>
<div class="sub_content" id="sub">せなブログ</div>
<div>せなブログ</div>

複数の値を持っている場合

classなどの一部の属性には複数の値を持つことができるものがあります
その場合にはBeautiful Soupはそれらの値をlistとして表示します

soup = BeautifulSoup('<div class="main_content"></div>', 'html.parser')
soup2 = BeautifulSoup('<div class="main_content sub_content"></div>', 'html.parser')
print(soup.div['class'])
print(soup2.div['class'])
----結果----
['main_content']
['main_content', 'sub_content']

また、HTML標準の定義から外れた値の場合には一つのまとまりとして認識されます
(idを複数指定したりとか)

soup = BeautifulSoup('<div id="main category"></div>', 'html.parser')
print(soup.div['id'])
----結果----
main category