[Python] BeautifulSoup4の使い方

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.parserlxmlなどがあります。

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スクレイピングやデータ抽出などの処理には欠かせないライブラリなので、ぜひ活用してみてください。

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