[Python] findall・findの使い方

PythonのBeautifulSoupは、HTMLやXMLのドキュメントから要素を抽出するためのツールです。この記事では、BeautifulSoupのfindallメソッドとfindメソッドを使った要素の取得方法について解説します。

目次

findallメソッドの使い方

findallメソッドは、指定されたタグ名に一致するすべての要素を取得します。たとえば、上記のHTMLコードから<p>タグをすべて取得するには、以下のようにfind_allメソッドを使います。

from bs4 import BeautifulSoup

# HTMLコード
html = """
<html>
<head>
    <title>サンプルページ</title>
</head>
<body>
    <div class="content">
        <h1>見出し</h1>
        <p>文章1</p>
        <p>文章2</p>
        <ul>
            <li>リスト1</li>
            <li>リスト2</li>
            <li>リスト3</li>
        </ul>
    </div>
</body>
</html>
"""

# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html, "html.parser")

# <p>タグを取得
p_tags = soup.find_all("p")
print(p_tags)

このコードを実行すると、以下のような出力が得られます。

[<p>文章1</p>, <p>文章2</p>]

findallメソッドは、リスト形式で要素を返します。上記の例では、<p>タグが2つあり、その2つの要素がリスト形式で返されています。

findメソッドの使い方

findメソッドは、指定されたタグ名に最初に一致した要素を取得します。たとえば、上記のHTMLコードから<h1>タグを取得するには、以下のようにfindメソッドを使います。

from bs4 import BeautifulSoup

# HTMLコード
html = """
<html>
<head>
    <title>サンプルページ</title>
</head>
<body>
    <div class="content">
        <h1>見出し</h1>
        <p>文章1</p>
        <p>文章2</p>
        <ul>
            <li>リスト1</li>
            <li>リスト2</li>
            <li>リスト3</li>
        </ul>
    </div>
</body>
</html>
"""

# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html, "html.parser")

# <h1>タグを取得
h1_tag = soup.find("h1")
print(h1_tag)

このコードを実行すると、以下のような出力が得られます。

<h1>見出し</h1>

findメソッドは、リストではなく単一の要素を返します。上記の例では、最初に見つかった<h1>タグが返されています。

<参考>CSSセレクターを使った要素の取得

CSSセレクターを使うことで、より複雑な条件で要素を取得することができます。たとえば、上記のHTMLコードから、class属性がcontent<div>タグ内にある<p>タグを取得するには、以下のようにCSSセレクターを使います。

from bs4 import BeautifulSoup

# HTMLコード
html = """
<html>
<head>
    <title>サンプルページ</title>
</head>
<body>
    <div class="content">
        <h1>見出し</h1>
        <p>文章1</p>
        <p>文章2</p>
        <ul>
            <li>リスト1</li>
            <li>リスト2</li>
            <li>リスト3</li>
        </ul>
    </div>
</body>
</html>
"""

# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html, "html.parser")

# CSSセレクターを使って<p>タグを取得
p_tags = soup.select("div.content > p")
print(p_tags)

このコードを実行すると、以下のような出力が得られます。

[<p>文章1</p>, <p>文章2</p>]

CSSセレクターは、selectメソッドを使って適用することができます。上記の例では、div.contentというクラス名を持つ<div>タグ内にある<p>タグを取得するために、div.content > pというセレクターを使っています。

CSSセレクターについては下記ページでまとめています。

CSSセレクターは、selectメソッドを使って適用することができます。上記の例では、div.contentというクラス名を持つ<div>タグ内にある<p>タグを取得するために、div.content > pというセレクターを使っています。

findall/find と CSSセレクター の使い分けについては下記ページにまとめました。よかったら見てください。

まとめ

以上が、PythonのBeautifulSoupを使ったHTML要素の取得方法についての説明です。findallメソッドとfindメソッドを使うことで、タグ名を指定して要素を取得することができます。また、CSSセレクターを使うことで、より複雑な条件で要素を取得することができます。これらの機能を使うことで、Webスクレイピングやデータ収集などに役立てることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次