BeautifulSoupでHTMLのclassとidを使って情報を効率的に検索

Webスクレイピングを行う際に、BeautifulSoupは非常に便利なライブラリです。ここでは、BeautifulSoupを使ってHTMLのclassとidを使って情報を効率的に検索する方法について解説します。

BeautifulSoupの基本的な使い方

BeautifulSoupは、HTMLやXMLなどのマークアップ言語で書かれたドキュメントを解析するためのライブラリです。以下のようにインストールすることができます。

!pip install beautifulsoup4

BeautifulSoupを使用するためには、まずHTMLファイルを読み込む必要があります。次のように、open()関数を使ってファイルを開き、BeautifulSoup()関数を使ってファイルを解析します。

from bs4 import BeautifulSoup
with open("example.html") as fp:
    soup = BeautifulSoup(fp, "html.parser")

ここで、example.htmlは解析するHTMLファイルの名前です。解析されたファイルは、変数soupに保存されます。

HTMLのclassとidについて

HTMLのclassとidは、要素に付けられた属性の一つです。classは複数の要素に同じ名前を付けることができますが、idはページ内で一意でなければなりません。classとidは、CSSやJavaScriptで使用されることが多く、要素をスタイル付けたり、動的な挙動を追加するために使用されます。

BeautifulSoupでclassを使って情報を検索する方法

BeautifulSoupでは、find_all()メソッドを使って、指定されたclassを持つすべての要素を取得することができます。以下は、classがexampleであるすべての要素を取得する例です。

soup.find_all(class_="example")

classには、class_という引数を使ってアクセスする必要があります。これは、Pythonの予約語であるclassと混同しないようにするためです。

BeautifulSoupでidを使って情報を検索する方法

idを使って情報を検索する場合は、find()メソッドを使います。以下は、idがexampleである要素を取得する例です。

soup.find(id="example")

BeautifulSoupでclassとidを組み合わせて情報を検索する方法

classとidを組み合わせて情報を検索する場合は、以下のように指定します。

soup.find_all(class_="example", id="example")

これにより、classがexampleであり、かつidがexampleである要素がすべて取得されます。

実際の使用例とコード

以下は、実際にBeautifulSoupを使ってHTMLのclassとidを検索する例です。ここでは、http://example.comからHTMLファイルを取得し、classがexampleである要素をすべて取得します。

import requests
from bs4 import BeautifulSoup
url = "http://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
elements = soup.find_all(class_="example")
for element in elements:
    print(element)

実行結果は以下のようになります。

<p class="example">
    This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.
    <a href="https://www.iana.org/domains/example">More information...</a>
</p>
<p class="example">
    Example domains.
    <em>This domain is established to be used for illustrative examples in documents.</em>
    You may use this domain in examples without prior coordination or asking for permission.
    <a href="https://www.iana.org/domains/example">More information...</a>
</p>

まとめ

BeautifulSoupを使うことで、HTMLのclassとidを使って情報を簡単に検索することができます。classを使った場合はfind_all()メソッド、idを使った場合はfind()メソッドを使用します。また、classとidを組み合わせて検索する場合には、両方の属性を指定する必要があります。