要素間の移動と関係性の把握

Beautiful Soupの「HTMLツリーのナビゲーション」における「要素間の移動と関係性の把握」では、HTML文書の構造を木(ツリー)としてとらえ、各要素(タグ)同士の親子関係や兄弟関係を把握しながら移動・操作することが可能です。以下に、主なプロパティとその使い方を詳しく説明します。


1. .parent:親要素へのアクセス

ある要素の親要素(1階層上の要素)を取得します。

python
tag = soup.find('a') parent = tag.parent
  • tag<a>タグなら、それを囲む親のタグ(例:<div>など)を取得できます。


2. .parents:すべての親要素のイテレータ

複数階層の親要素をさかのぼるイテレータです。

python
for ancestor in tag.parents: print(ancestor.name)
  • 順に<body>, <html>など、最上位の要素までたどれます。


3. .children:直下の子要素(1階層下)

指定した要素の直下の子ノード(タグや文字列)を列挙します。

python
for child in tag.children: print(child)
  • リストではなくイテレータで返されます。


4. .descendants:すべての子孫要素(複数階層下)

孫、ひ孫なども含めたすべての下位要素を再帰的にたどれます。

python
for descendant in tag.descendants: print(descendant)

5. .next_sibling:次の兄弟要素

現在の要素の次の兄弟ノードを取得します(タグでないこともあり得ます)。

python
next_sib = tag.next_sibling
  • 空白や改行(\n)が含まれる場合があるため、注意が必要です。


6. .previous_sibling:前の兄弟要素

現在の要素の前の兄弟ノードを取得します。

python
prev_sib = tag.previous_sibling
  • これも改行や空白が含まれることがあります。


7. .next_siblings / .previous_siblings:兄弟ノードのイテレータ

次または前の兄弟ノードをすべて列挙できます。

python
for sibling in tag.next_siblings: print(sibling)

まとめ:要素間の関係性と移動の活用例

python
tag = soup.find('div', class_='content') print("親要素:", tag.parent.name) print("子要素一覧:") for child in tag.children: print(child.name) print("次の兄弟:", tag.next_sibling)

このように、Beautiful Soupを用いることでHTML文書を「親 → 子」、「兄 → 弟」といった構造でナビゲートでき、構造の把握や特定の要素の抽出が柔軟に行えます。これはスクレイピング処理において非常に有用な機能です。

ChatGPT4o 生成日:2025/06/19