初心者向け学習方法一覧はこちら
今回はPythonを用いて「Selenium」、「BeautifulSoup」を使用しスクレイピングをしてデータ収集する方法を紹介します!
スクレイピングとは、機械を用いて自動的にWEBサイトから情報を集めることです。
後述していますが、スクレイピングを禁止しているサイトもありますので、そのような場合はAPIや別手段を検討してみてください。
本記事はPythonでスクレイピングをしデータ収集をする方法の前編です。
後編では実際にスクレイピングを行いデータ収集をする方法を実例を用いて紹介しています。
また、Pythonの環境構築がまだできていない方はこちらの記事を参考にしてみてください!
BeautifulSoupについて
まずBeautifulSoupとはHTMLやXMLデータから必要なデータを取得することができるスクレイピング用パッケージです。
早速BeautifulSoupを自分のパソコンにインストールしましょう。
Windows上ではコマンドプロンプト、Macの方はPowerShellに以下のコマンドを入力してください。
pip install request
インポートは以下のコードでできます。
import request
from bs4 import BeautifulSoup
BeautifulSoupはページごとにHTMLやXMLを解析し、データを取得するため、軽量に動作しますが、ログインが必要なページからはデータを取得することができません。
もしログインが必要なページをスクレイピングするのであれば、Seleniumというパッケージを使用すると良いでしょう。
次の見出しではSeleniumについて紹介します。
Seleniumとは
Seleniumでは人間がブラウザ操作するように、クリックや文字を入力する機能が備わっており、入力フォームなど、パスワードやログインが必要なページでは、Seleniumを使用することでスクレイピングをすることができます。
それではSeleniumの環境構築を進めます。
Seleniumを使用するために、まず、ChromeとChrome driverをインストールする必要があります。
Chrome driverはブラウザのChromeをプログラムを通じて操作するためのものです。
Chromeのインストールがまだな方は以下のGoogle Chrome公式ドキュメントのリンクを参照していただくとインストールできます。
続いて、Chrome driverをインストールしましょう。
diriverをインストールする前に、まず自分が使用しているChromeのバージョンを知る必要があります。
バージョンを確認するため、Chromeを開き、右上の部分から「設定」を開いてください。
「設定」の左側のタブの下にある「Chromeについて」を選択すると以下のような画面が出てきます。
このバージョンの部分の数字を覚えておき、次に適したChrome driverのインストールをしましょう!
以下のリンクをクリックし、バージョンが一致しているChrome driverをインストールしてください。
もし、完全に一致するバージョンがなければ、左から3桁の部分が一致しているバージョンをインストールしましょう。
これでダウンロードファイルにzipファイル形式のChrome driverがインストールできました。
zip形式のままではChrome driverを使用することができませんので解凍しましょう。
解凍する場所に指定はありませんが、Chrome driver.exeを置いた場所だけ覚えておいてください。
補足ですが、Chrome driverはChromeがアップデートされるたびに再インストールする必要があります。
公式には推奨はされていませんが、手間に感じる方はChrome driverの自動アップデートの設定をOFFにしておくのも一つ選択肢です。
最後にSeleniumをインストールしましょう!
Windows上ではコマンドプロンプト、Macの方はPowerShellに以下のコマンドを入力してください。
pip install selenium
使用する際には以下のようにします。
from selenium import webdriver
CHROMEDRIVER = "C:\python\chromedriver.exe"#ここにChrome driverの場所を入力する必要があります!
スクレイピング前に注意すること
スクレイピングを実施するにあたり、2つ意識することがあります。
1つ目に意識することは、スクレイピングが禁止されているかどうかを確認することです。
もし、禁止されているにもかかわらず、スクレイピングを行った場合は、訴訟を起こされるリスクがあることをご留意ください。
禁止しているかどうかは、サイトの利用規約とrobots.txtから確認することができます。
例えば、「Yahoo!ファイナンス」はスクレイピングを禁止しています。
どのように禁止しているかは以下のページから確認することができます。
他にもSNSでは、スクレイピングを個人情報の観点から基本的に禁止されています。
利用規約に記載が見当たらなくても、robots.txtを設置しているWebサイトであれば、WebサイトのトップページのURLに/robots.txt
を加えることで許可されているぺージ・許可されていないページを確認することができるので、こちらも確認するようにしましょう。
2つ目に意識することは、スクレイピングは相手サーバーに負荷をかけるということです。
スクレイピングによって自動で大量のデータを取得できるということは、それだけ、取得元のサイトにアクセス負荷がかかるということでもあります。
実際に岡崎市立中央図書館事件という、図書館の蔵書データをスクレイピングした男性が、サーバーに負荷をかけ、サーバーダウンさせてしまったため、起訴猶予処分となった事件がありました。
もし意図せずとも、サーバーに負荷をかけて、サーバーダウンさせてしまえば、営業妨害として、訴えられる可能性があることを留意しておきましょう。
スクレイピングは便利に情報を収集することができますが、禁止されているケースや法律に触れてしまうリスクがあります。それでも、スクレイピングを行う場合は、禁止事項、法律に触れることがないように自己責任で、迷惑がかからないように実施してください。
スクレイピングの方法
主要コマンド一覧
BeautifulSoupとSeleniumの主要コマンドを紹介します。
まず「BeautifulSoup」のコマンドについてです。
まずWEBページのHTMLの内容を取得するには以下のコードで出来ます。
html_text = request.get("ここにURLを入力").text
そして取得したHTMLの内容を解析するには「find」「find_all」メソッドを使用します。
「find」は一つ目の要素を取得し、「find_all」は全て取得することができるメソッドです。
例として「a」タグのついたデータを取得してみましょう。
#下準備として取得したHTML内容をBeautifulSoupで解析できる形にする
soup = BeautifulSoup(html_text, 'html.parser')
soup.find_all("a")
これで「a」タグのついたデータをすべて取得することが出来ました。
さらにデータの整理を行う場合は正規表現を使用すると良いでしょう。
次にSeleniumのコマンドについてです。
まずWEBページの要素をPythonに入力する必要があります。
Seleniumでは要素の指定するには以下のコードを使用します。
elem = browser.find_element_by_id("id名")#入力する箇所を指定
指定した要素に文字を入力するには以下のコードを使用します。
elem.send_keys("入力したい内容")
デフォルトで内容が入力されている場合は以下のコードでデフォルト値を削除しましょう。
elem.clear()
決定する為に「Enter」や次の要素に移動するために「Tab」を入力したい場合は以下のコードを使用します。
例では「Tab」キーの場合です。
elem.send_keys(Keys.TAB)
これで「BeautifulSoup」と「Selenium」の主要な機能は以上です。
まとめ
前編では「BeautifulSoup」と「Selenium」の機能の紹介をしました。
後編ではスクレイピングを行いデータ収集をする方法を実例を用いて紹介します。
是非こちらもご覧下さい!
後編へは以下のリンクから進むことが出来ます!
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け