スライドショースライドショー

Pythonのbeautifulsoupでスクレイピングをしてみよう

この記事ではPythonのBeautiful Soupの使い方について解説をしていきます。Beautiful Soupはスクレイピングをするためのライブラリです。

スクレイピングとは何かを知りたい。
Pythonでスクレイピングをしたい。

といった方に向けてこの記事では、

  • スクレイピングとは
  • スクレイピングの流れ
  • Beautiful Soupでスクレイピングをする方法

について解説していきます。初心者の方もぜひご覧ください!

スクレイピングとは

まずはスクレイピングとは何かについて知っておきましょう。スクレイピングについて分かっている方は読み飛ばしてもらっても構いません!

スクレイピングは、WebサイトのHTMLからデータを取得して、たくさんの情報から本当に必要な情報だけを取得することを言います。また、似たものにAPIというものがあります。

APIはWebサイトから提供されている、内部的なデータの受け渡しですが、スクレイピングはWebサイトから何も提供されていない、外部的なデータの受け渡しになります。

なので、Webサイトによってはスクレイピングが禁止されていて、データにアクセスするためには提供されているAPIを使わなければならない場合もあります。

今回はBeautiful SoupというPythonのパッケージを使って、簡単なスクレイピングをしてみましょう。また今回はHTMLCSSの知識が必要になります。不安な方は、ぜひこちらの記事を参考に学習してみてください。

スクレイピングの流れ

一口にスクレイピングといっても、スクレイピングには様々な準備や工程が必要になります。まずは、スクレイピング対象の記事にアクセスをする必要があります。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のパッケージ管理ツールについてはこちらの記事をご覧ください。

【Python入門】pipとは?使い方をわかりやすく解説!
更新日 : 2019年7月30日

対象のページにアクセスをする

インストールが出来たら、次は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を使う方法について解説をしてきました。スクレイピングとは何かについて、分かって頂けたでしょうか?

スクレイピングでは、サイトにアクセスして、構文を解析して、という流れが必要になってきます。サンプルコードをよく読んで、どのような流れでスクレイピングをしているのか、しっかりと見につけておきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ryo

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説