この記事ではPythonのBeautiful Soupの使い方について解説をしていきます。Beautiful Soupはスクレイピングをするためのライブラリです。
Pythonでスクレイピングをしたい。
といった方に向けてこの記事では、
- スクレイピングとは
- スクレイピングの流れ
- Beautiful Soupでスクレイピングをする方法
について解説していきます。初心者の方もぜひご覧ください!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
スクレイピングとは
まずはスクレイピングとは何かについて知っておきましょう。スクレイピングについて分かっている方は読み飛ばしてもらっても構いません!
スクレイピングは、WebサイトのHTMLからデータを取得して、たくさんの情報から本当に必要な情報だけを取得することを言います。また、似たものにAPIというものがあります。
APIはWebサイトから提供されている、内部的なデータの受け渡しですが、スクレイピングはWebサイトから何も提供されていない、外部的なデータの受け渡しになります。
なので、Webサイトによってはスクレイピングが禁止されていて、データにアクセスするためには提供されているAPIを使わなければならない場合もあります。
今回はBeautiful SoupというPythonのパッケージを使って、簡単なスクレイピングをしてみましょう。また今回はHTMLやCSSの知識が必要になります。不安な方は、ぜひこちらの記事を参考に学習してみてください。
スクレイピングの流れ
一口にスクレイピングといっても、スクレイピングには様々な準備や工程が必要になります。まずは、スクレイピング対象の記事にアクセスをする必要があります。HTMLをブラウザでダウンロードしてもスクレイピングは出来ますが、スマートでは無いですし、リアルタイムに変更されるHTMLに対しては対応できません。
次に、クローリングです。これは必ずしも必要な工程では無いのですが、様々なリンクを巡回して、対象のページのデータを取得していく作業です。
イメージが付きにくいかもしれませんが、GoogleやYahooなどの検索エンジンは、とても有名なクローラの一つです。これらの準備を経て、スクレイピングが実行されます。スクレイピングでは、HTMLの構文を解析(パース)して、欲しい情報だけを取得することが出来ます。
Beautiful Soupとは
ではここで今回使っていくBeautiful Soupについて見ていきましょう。Beautiful SoupはHTMLデータをの構文を解析するためのパッケージです。HTMLを解析するために、HTMLタグやCSSのセレクタで抽出する部分を指定することが出来ます。
基本的にはブラウザの検証ツールを使って、抽出したい部分がどのタグやセレクタに対応しているのかを調べ、そのタグやセレクタをBeautiful Soupで指定します。Beautiful Soupはスクレイピングのために作られたパッケージなので、より効率的にスクレイピングを行うことが出来ます!
Beautiful Soupでスクレイピングをする方法
それでは早速スクレイピングをしてみましょう!
Beautiful Soupをインストールする
まずはBeautiful Soupをインストールしましょう。pipのコマンドでインストールすることが出来ます。
pip install beautifulsoup4
Beautiful Soupではバージョン4をインストールしましょう。ちなみにpipというPythonのパッケージ管理ツールについてはこちらの記事をご覧ください。
対象のページにアクセスをする
インストールが出来たら、次はrequestsを使って、スクレイピングをしたい記事にアクセスしましょう。requestsもBeautiful Soupと同じようにpipを使ってインストールすることが出来ます。
pip install requests
このrequestsはurllib2というインターネットにアクセスすることが出来るモジュールを、より使いやすくしたパッケージになります。
こちらのコードをご覧ください。
import requests url = "https://www.sejuku.net/blog/" response = requests.get(url) response.encoding = response.apparent_encoding print(response.text)
今回は侍エンジニアのブログトップページにアクセスをしてみましょう。url変数を自分の好きなサイトのアドレスに変更すると、アクセス先を変更することが出来ます。
requests.get(url)では、実際にHTMLデータを取得しています。response.apparent_encodingを実行してエンコーディングを変更しておくと、文字化けをすることが少なく済みます。
ちなみに、このコードを短時間のうちに何度も実行すると、サーバーに大きな負荷がかかってしまいます。なので、サーバーに負担をかけないような工夫(アクセスに時間をあけるなど)をしましょう。
スクレイピングをする
先程までの作業でスクレイピングをしたい記事にアクセスすることが出来ました。それではBeautiful Soupでスクレイピングをしてみましょう。
こちらのコードをご覧ください。
import requests from bs4 import BeautifulSoup url = "https://www.sejuku.net/blog/" response = requests.get(url) response.encoding = response.apparent_encoding bs = BeautifulSoup(response.text, 'html.parser') for i in bs.select("h3"): print(i.getText())
実行結果
学習者インタビュー カリキュラム プログラミング入門カリキュラム Ruby入門カリキュラム Swift入門カリキュラム Java入門カリキュラム Python入門カリキュラム JavaScript入門カリキュラム 人気記事セレクション
このコードではh3のタグを選んで全て表示させています。無事にスクレイピング出来ましたね。先程、requests.get(url)で取得したデータをテキストとしてBeautiful Soupに渡しただけで、HTMLを解析してくれました。
ちなみに、第二引数の「html.parser」はHTMLでパースをするということを設定しています。bs.select(“h3”)でh3のタグを指定して、for文を回すことでそれぞれのタイトルを抽出することが出来ましたね。
まとめ
この記事ではスクレイピングとは何かから、PythonのBeautiful Soupを使う方法について解説をしてきました。スクレイピングとは何かについて、分かって頂けたでしょうか?
スクレイピングでは、サイトにアクセスして、構文を解析して、という流れが必要になってきます。サンプルコードをよく読んで、どのような流れでスクレイピングをしているのか、しっかりと見につけておきましょう!