PythonでHTMLやXMLなどのマークアップ言語から情報を取得するためのライブラリであるBeautifulSoup4の使い方について解説していきます。
BeautifulSoup4とは
BeautifulSoup4は、PythonでHTMLやXMLなどのマークアップ言語から情報を取得するためのライブラリです。Webスクレイピングやデータ抽出などの処理に使用されます。
インストール方法
まずは、BeautifulSoup4をインストールする必要があります。以下のコマンドを実行してください。
pip install beautifulsoup4
BeautifulSoup4の基本的な使い方
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スクレイピングやデータ抽出などの処理には欠かせないライブラリなので、ぜひ活用してみてください。