【Python】BeautifulSoupを使ったWebスクレイピングのサンプルコードを解説

作成日: 更新日:

開発環境

  • Python version: python 3.10.11
  • beautifulsoup4: 4.11.1

PythonのBeautiful Soupとは

Beautiful Soup(ビューティフル・スープ)とは、HTMLやXMLなどのマークアップ言語からデータを抽出するためのPythonのライブラリです。 Beautiful Soupは、パース(解析)されたHTMLやXMLのドキュメントをセレクタやフィルタなどの機能で特定の要素やデータを抽出することができるため、簡潔で効率的な方法でデータを抽出できます。 また、Beautiful Soupは、外部ライブラリのlxmlやhtml5libと組み合わせて使用されることが一般的で、これらのライブラリを組み合わせてWebスクレイピングやデータ収集などのタスクに広く使用されています。 公式ドキュメント:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#

PythonのBeautiful Soupの使い方

PythonのBeautiful Soupの使い方を解説していきます。

Beautiful Soupをインストール

Beautiful Soupをインストールするにはpipコマンドを使用します。

1pip install beautifulsoup4

また、データの取得にはPythonではRequestsを利用することは一般的なため、インストールされていない方は下記のコマンドも実行してください。

1pip install requests

これで準備完了です。

PythonのBeautiful Soupでスクレイピングする

次にPythonのBeautiful Soupでスクレイピングするサンプルコードを解説しています。

スクレイピングのサンプルコード

下記はBeautiful Soupを使用してYahoo!JAPANのトップページにリクエストを送り、TopicsからタイトルとURLの一覧を取得するサンプルコードです。

1import requests
2from bs4 import BeautifulSoup
3
4# スクレイピング対象の URL にリクエストを送り HTML を取得する
5res = requests.get('https://www.yahoo.co.jp/')
6
7# レスポンスの HTML から BeautifulSoup オブジェクトを作る
8soup = BeautifulSoup(res.text, 'html.parser')
9
10# Topicsの要素を取得する
11elements = soup.select('#tabpanelTopics1 > div > div._2jjSS8r_I9Zd6O9NFJtDN- > ul > li')
12
13# リストから要素を取り出し、その後にtext属性を使用してテキストを取得
14for element in elements:
15    title_text = element.select_one('h1').text
16    title_url = element.select_one('a')['href']
17    print("------------------------")
18    print(title_text)
19    print(title_url)

Yahoo JapanのトップページにGETリクエストを送る

Yahoo JapanのトップページにGETリクエストを送ります。

1res = requests.get('https://www.yahoo.co.jp/')

その結果として得られるHTMLを取得し、変数resに代入しています。

HTMLドキュメントを解析する

次にHTMLドキュメントを解析しています。

1soup = BeautifulSoup(res.text, 'html.parser')

取得したHTMLをBeautiful SoupのBeautifulSoupオブジェクトにパースすることにより、HTMLドキュメントを解析して要素を抽出しやすくなります。

CSSセレクタで要素を抽出する

CSSセレクタで要素を抽出します。

1elements = soup.select('#tabpanelTopics1 > div > div._2jjSS8r_I9Zd6O9NFJtDN- > ul > li')

Yahoo Japanトップページのトピックスの部分をBeautifulSoupのselectメソッドを使用して、指定されたCSSセレクタに一致する要素を抽出しています。

各トピックスの要素からタイトルとURLを取得する

最後に各トピックスの要素からタイトルとURLを取得します。

1for element in elements:
2    title_text = element.select_one('h1').text
3    title_url = element.select_one('a')['href']
4    print("------------------------")
5    print(title_text)
6    print(title_url)

select_oneメソッドを使用して、CSSセレクタに一致する最初の要素を取得し、その後、text属性や属性値を取得しています。 ループ内のelement.select_one('h1').textはタイトル、element.select_one('a')['href']はURLを取得しています。

おわりに

今回はPythonでBeautifulSoupを使ったスクレイピングの方法について解説していきましたが、いかがだったでしょうか。 WebスクレイピングはSeleniumが有名ですが、HTMLやXMLのドキュメントを解析することが得意なBeautifulSoupと組み合わせることにより、非常に効率的にデータを収集することができます。 Webスクレイピングの需要は年々高まっているため、是非、使いこなしていきましょう。

【Python】BeautifulSoupを使ったWebスクレイピングのサンプルコードを解説 | いっしー@Webエンジニア