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スクレイピングやデータ収集などに役立てることができます。