BeautifulSoup4って何ができるの。使い方が知りたい。
パーサって何?
PythonによるWebスクレイピングでBeautifulSoup4を利用したい方に向けて、BeautifulSoup4でできることや使い方を解説しています。
具体的に次のことについて説明しています。
- BeautifulSoup4とは
- BeautifulSoup4の利用に必要な前提知識
- BeautifulSoup4の使い方
「偉そうに語るおまえは誰やねん。」と思われるので、私のことも少し紹介させてください。
たいらーのプロフィール
- 文系四大出身。ソフトウェア開発の経験はなしですが、IT業界に身を置いています。
- 開発者やユーザーとのパイプ役など、業務にプログラミングスキルを活かす。
- Pythonは独学で習得。スクレイピングや作業の自動化などに勤しんでいます。
この記事では、BeautifulSoup4の利用に必要な前提知識として、HTMLやパーザについても分かりやすく解説しています。
BeautifulSoup4の理解を深め、ご自身のWebスクレイピングにお役立てください。
1.BeautifulSoup4とは
BeautifulSoupとは、HTMLからデータを抽出するライブラリです。
そのため、Webスクレイピングでは、HTMLの解析に使われます。
BeautifulSoupには、バージョン2系やバージョン3系もありますが、最新のPythonではサポートしていないので、この記事ではBeautifulSoup4を前提として話を進めます。
・BeautifulSoup4でできること
Webスクレイピングは、基本的に「Webページのダウンロード」、「データの抽出」、「データの整形・保存」の順におこなわれます。
BeautifulSoupが担うデータの抽出には、Webページをダウンロードする必要がありますが、BeautifulSoupだけではWebページを取得できないので、Requestsや他のライブラリと組み合わせて使用し、HTMLからデータを抽出します。
Webスクレイピングで使用する各ライブラリの役割をまとめた表が以下です。
ライブラリ | Webデータの取得 | データの抽出 | データの整形・保存 |
---|---|---|---|
Requests | ○ | × | × |
Beautiful Soup | × | ○ | × |
Pandas | × | × | ○ |
Selenium | ○ | ○ | × |
Scrapy | ○ | ○ | ○ |
BeautifulSoupでは、WebページからHTMLのデータをタグなどを含めてまるごと取得し、オブジェクト(データを抽象的に表したもの。この記事では「データの塊」のイメージで可)を作成します。
そのオブジェクトから必要な情報を検索して、データを抽出します。
2.BeautifulSoup4の利用に必要な前提知識
BeautifulSoup4は、HTMLを解析するライブラリなので、どうしてもHTMLやCSSに関する知識が必要になります。
ここでは、次のことについて簡単に解説します。
- HTML/CSSとは
- パーサとは
・HTML/CSSとは
日頃、目にするWebサイトは主にHTMLとCSSで構成されています。
HTMLは、文書や画像をコンピュータに正しく認識させるために、目印を使って意味づけをする、マークアップ言語というプログラミング言語に分類されます。
BeautifulSoupでは、HTMLのタグ(目印)の情報を利用してデータ抽出を行います。
CSSは、Webサイトの装飾に使われる言語です。例えば文字の色やサイズ、フォントの指定が該当します。
また、柔軟にデザインをするために、CSSで定義したデザインをどのHTML要素に適用させるか指定する、CSSセレクタがあります。
BeautifulSoupでは、個別のHTML要素を取得するために、CSSセレクタの情報を利用します。
実際にどのように使うかなど、詳しい解説は『WebスクレイピングのためのHTML・CSS入門』をご覧ください。
・パーサとは
パーサとは、解析処理のことです。
実際にコードを見たほうが分かりやすいので、次のサンプルコードをご覧ください。BeautifulSoupの基本構文です。
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') #Webページを取得 soup = BeautifulSoup(url.text, "html.parser") #htmlを元に解析
6行目の括弧の左側(url.text)が「何を取得するか」を、右側(”html.parser”)が「パーサ」を指定しています。
「取得した文字列データを、HTMLの解析に適した形で解析してくれ」というのが、6行目の意味になります。
パーサにはいくつか種類があるので、簡単にまとめます。
種類 | 概要 |
---|---|
html.parser | Pythonの標準的なHTMLパーサ |
lxml | 外部ライブラリであるlxmlのHTMLパーサ。html.parserより処理が速い。 外部ライブライなので、pipでインストールが必要。 |
html5lib | 外部ライブラリであるhtml5libのHTMLパーサ。処理速度は遅い。 外部ライブライなので、pipでインストールが必要。 |
どれが適しているのかという話では、個人の感覚があるので、それぞれ使ってみて決めましょう。html5libは処理が遅いといわれますが、扱いやすいという人もいるので、使ってみて解析がうまくいかない場合に他を試すのがよいです。
3.BeautifulSopu4の使い方
冒頭で説明したように、BeautifulSopu4では、取得したHTMLの情報をオブジェクトのまま使用するケースはほとんどなく、必要な情報を検索し、絞り込んで使用します。
情報を絞り込むためには、BeautifulSoupのメソッドを使用します。
このメソッドを使用すれば、HTMLの要素に紐づくデータはほぼ取得できます。
以下に主要なものを紹介します。
(サンプルは簡素なソースコードのため、実行結果が荒いです。)
titleタグを取得する。
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') soup = BeautifulSoup(url.text, "html.parser") getdata = soup.title print(getdata) #実行結果 <title>出馬表サンプル | うまのいえ</title>
headタグを取得する。
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') soup = BeautifulSoup(url.text, "html.parser") getdata = soup.head print(getdata) #実行結果 ※データ量が多いので省略
取得条件に一致したデータを取得する。
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') soup = BeautifulSoup(url.text, "html.parser") getdata = soup.find('a') print(getdata) #実行結果 <a class="site-name site-name-text-link" href="https://umano-ie.com/" itemprop="url"><span class="site-name-text" itemprop="name about">うまのいえ</span></a>
取得条件に一致したデータをすべて取得する。
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') soup = BeautifulSoup(url.text, "html.parser") getdata = soup.find_all('a') print(getdata) #実行結果 ※データ量が多いので省略
取得条件に一致したデータをすべて取得する。(CSSセレクタを用いて取得)
import requests from bs4 import BeautifulSoup url = requests.get('https://umano-ie.com/racesample/') soup = BeautifulSoup(url.text, "html.parser") getdata = soup.select('a[href ="https://umano-ie.com/"]') print(getdata) #実行結果 [<a class="site-name site-name-text-link" href="https://umano-ie.com/" itemprop="url"><span class="site-name-text" itemprop="name about">うまのいえ</span></a>, <a class="site-name site-name-text-link" href="https://umano-ie.com/" itemprop="url"><span class="site-name-text" itemprop="name about">うまのいえ</span></a>]
実行結果が不格好ですが、指定したタグ等でデータが取得できることが分かっていただけたと思います。
データをきれいに整形したい場合は、必要に応じてソースコードをアレンジしてください。
4.まとめ
以上、BeatifulSoup4の基本的な知識について解説しました。
Webスクレイピングの作業は、対象のHTML構造を確認し、BeautifulSoup4のメソッドを活用することで、タグやCSSセレクタに紐づいた情報を取得するのが、基本的な流れになります。
メソッドの説明は一部的でしたが、スクレイピングの幅を広げたい方は、掘り下げて学習してみてください。
BeautifulSoup4以外にも、PandasやRequestsなど、Webスクレイピングに必要なライブラリはたくさんあります。
「もっとWebスクレイピングの知識を深めたい!」という方に向けて、スクレイピングについての知識や学習方法などをまとめた『【仕事でPython活用】スクレイピングとは?やり方・学習方法を解説』を用意しました。
スクレイピングは、仕事やプライベートに活用できるので、是非ご覧ください。
ご清聴ありがとうございました。