PythonでHTMLやXMLなどのマークアップ言語から情報を取得するためのライブラリであるBeautifulSoup4の使い方について解説していきます。
BeautifulSoup4とは
BeautifulSoup4は、PythonでHTMLやXMLなどのマークアップ言語から情報を取得するためのライブラリです。Webスクレイピングやデータ抽出などの処理に使用されます。
インストール方法
まずは、BeautifulSoup4をインストールする必要があります。以下のコマンドを実行してください。
pip install beautifulsoup4BeautifulSoup4の基本的な使い方
BeautifulSoup4を使うためには、まずはライブラリをインポートします。
from bs4 import BeautifulSoup次に、取得したいHTMLデータをBeautifulSoupオブジェクトに変換します。
html = '<html><body><h1>Hello, World!</h1></body></html>'
soup = BeautifulSoup(html, 'html.parser')この例では、html変数にHTMLの文字列を代入しています。BeautifulSoupオブジェクトには、変換したいHTMLデータと、パーサーを指定します。パーサーには、html.parserやlxmlなどがあります。
BeautifulSoupオブジェクトには、HTMLデータの構造が保持されています。soupオブジェクトを操作することで、必要な情報を取得することができます。
タグの取得
HTMLデータからタグを取得するには、findメソッドやfind_allメソッドを使います。findメソッドは、指定したタグを1つだけ取得します。find_allメソッドは、指定したタグをすべて取得します。
html = '<html><body><h1>Hello, World!</h1><p>BeautifulSoup4 tutorial</p></body></html>'
soup = BeautifulSoup(html, 'html.parser')
# h1タグを取得する
h1 = soup.find('h1')
print(h1) # <h1>Hello, World!</h1>
# pタグをすべて取得する
p_tags = soup.find_all('p')
for p in p_tags:
print(p) # <p>BeautifulSoup4 tutorial</p>属性の取得
タグに設定されている属性の値を取得するには、getメソッドを使います。
html = '<html><body><a href="https://example.com">example</a></body></html>'
soup = BeautifulSoup(html, 'html.parser')
# aタグのhref属性を取得する
a = soup.find('a')
href = a.get('href')
print(href) # https://example.com要素の取得
タグの中にあるテキストや、タグの中にある別のタグを取得するには、text属性やcontents属性を使います。
html = '<html><body><h1>Hello, World!</h1><p>BeautifulSoup4 tutorial</p></body></html>'
soup = BeautifulSoup(html, 'html.parser')
# h1タグのテキストを取得する
h1 = soup.find('h1')
text = h1.text
print(text) # Hello, World!
# bodyタグの子要素をすべて取得する
body = soup.find('body')
contents = body.contents
print(contents) # [<h1>Hello, World!</h1>, <p>BeautifulSoup4 tutorial</p>]
CSSセレクターの使い方
CSSセレクターを使うことで、より柔軟に要素を取得することができます。CSSセレクターを使うには、selectメソッドを使います。
html = '<html><body><div class="header"><h1>Hello, World!</h1></div><div class="content"><p>BeautifulSoup4 tutorial</p></div></body></html>'
soup = BeautifulSoup(html, 'html.parser')
# classがheaderの要素の中のh1タグを取得する
h1 = soup.select('.header h1')
print(h1) # [<h1>Hello, World!</h1>]
# classがcontentの要素の中のpタグをすべて取得する
p_tags = soup.select('.content p')
for p in p_tags:
print(p) # <p>BeautifulSoup4 tutorial</p>CSSセレクターの使い方について下記ページでまとめました。よかったら見てください。

実践的な例
ここまでで、BeautifulSoup4の基本的な使い方を紹介しました。次に、実際のWebページから情報を取得する例を紹介します。
import requests
from bs4 import BeautifulSoup
# Yahoo!ニュースのトップページから、ニュースタイトルとURLを取得する
url = 'https://news.yahoo.co.jp/'
res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')
# ニュースタイトルとURLを取得する
news_list = soup.select('.topics li')
for news in news_list:
title = news.find('a').text
url = news.find('a').get('href')
print(title, url)
この例では、requestsライブラリを使ってYahoo!ニュースのトップページからHTMLデータを取得しています。取得したHTMLデータをBeautifulSoupオブジェクトに変換し、CSSセレクターを使ってニュースタイトルとURLを取得しています。
まとめ
以上が、BeautifulSoup4の使い方についての解説となります。Webスクレイピングやデータ抽出などの処理には欠かせないライブラリなので、ぜひ活用してみてください。
