【初心者のPython入門】SeleniumでGoogle mapsのデータをスクレイピング




こんにちは、スギです!

先日、Seleniumを使ってツイッターのフォロー自動化を行いました。

それに引き続き、今回はSeleniumを使ってGoogle mapsからデータを取得していきたいと思います。

 

まだ、Seleniumのインストールが完了されていない場合は、こちらの記事をご覧になられてからこちらの記事を読み進めて頂ければと思います。

【初心者のpython入門】seleniumでログイン自動化!〜Twitter編〜


汎用性の広いPythonを0から習得するためのフロー及び実際にPythonで開発を行い開発案件を獲得するまでの筋道について解説しているチュートリアル資料と

コーディングの参考となる実際にPythonを使って作ったツールのソースコードを無料で配布していますので、こちらも併せてご覧ください。

初心者・入門者でも30日間で学習できるおすすめPython学習方法

 

1. スクレイピングとは

まず、作業に入る前にスクレイピングとは何なのかザックリと説明していきます。

一言で言えば、Webページの情報を取得することができる技術の事です。

普段よく見ているサイトや情報を一々検索を行うのは面倒ですが、スクレイピングの技術を使うことにより、面倒な作業をすることなく自分が欲しい情報が手に入る事ができます。

この技術は個人で実用的に使用する事はあまりありませんが、会社や個人経営されている大きな規模になると、リストの取得によく使われています。

こういったスクレイピング技術を使いこなせるようになれば、フリーランスなど個人で稼ぐ時にとても貴重な人材となれますので、是非この機会にマスターしてしまいましょう。

Pythonでのスクレイピングでは大きく分けて二つのライブラリを使用したやり方が主流となっています。

・Beautifulsoup

・Selenium

 

1-1. Beautifulsoup

BeautifulSoupモジュールは、pythonのライブラリの一つでスクレイピングに特化した機能を備えています。

本来、Webページは複雑な構造をしていますが、こちらのライブラリを使ってWebページのデータを整形を行います。

このように、こちらのライブラリはスクレイピングをしやすいような処理をしてくれるのです。

1-2. Selenium

Seleniumはブラウザに表示される要素を操作し、取得してどういう状態になっているかをテストできます。

元々Seleniumという技術はスクレイピングとしての活用ではなく、ブラウザに表示される挙動確認のために使われていました。

なので、Beautifulsoupに比べて使いやすさには劣りますが、動的にブラウザの挙動が確認できるので修正等の確実性が高いです。

それ以外にもブラウザを操作するので、スクリーンショットや画面のスクロールなどBeautifulsoupではできない動作ができて便利なライブラリとなっています。

2. プログラムの概要

それでは、seleniumによるGoogle mapsを使ったデータの取得方法を解説していきます。

 

こちらが今回の全体のコードになります。

 

今回のコードはSeleniumとBeautifulsoupの両方を使って、スクレイピングを行っていきます。

こちらのコードの概要はGooglemapsにて地域やジャンルのデータを入力してその出力結果から一番最初のデータ(店名、住所、Webサイトのリンク、電話番号)を取得してくるプログラムになります。

 

このプログラムを作成するにあたって以下の内容を行います。

・必要なモジュールのインポート

・ブラウザを操作するドライバーを用意

・Google mapsを開く

・検索欄にデータを入力してクリック

・データの整形を行い、取得したいデータを選択

一つずつコードを使って解説していきます。

3. 必要なモジュールのインポート

 

ここではimport文を使ってSelenium、Beautifulsoupをインポートしています。

さらに処理する時間を保持するtimeモジュールやパスを通すchromedriver_binaryモジュールをインポートしています。

これにより、今回のプログラムを作成する準備が整いました。

4. ブラウザを操作するドライバーを用意

 

今回はGoogleにて提供されている、Google Chromeのブラウザを使用していきます。

なので、予めChromeを操作するためにドライバーのインストールを行ってください。

→http://chromedriver.chromium.org/downloads

4-1. ドライバーとは

Seleniumをインストールしただけではブラウザを操作することができません。

操作するためにはドライバーをインストールする必要があります。

車を操作するには運転手が必要ですよね。

車がブラウザ、運転手がドライバーと思っていただければ分かりやすいかと思います。

 

※ドライバーをインストールする際の注意点

ドライバーをインストールする場合、ご自身が扱っているChromeと同じバージョンでインストールする必要があります。

不具合を避けるためにも、最新の状態にアップグレードしておいてください。

やり方の詳細は下記のリンクを貼っておきます。

→https://support.google.com/chrome/answer/95414?co=GENIE.Platform%3DDesktop&hl=ja

5. Google mapsを開く

 

次にGoogle mapsを開いていきます。

変数にGoogle mapsのurlを格納し、その格納した変数をドライバーを使って開いています。

ここは特に難しくありませんね。

6. 検索欄にデータを入力して、クリック

 

Google mapsを開くと以下の画像が表示されるかと思います。

今回のコードは左上の赤枠にデータを入力して、クリックするところまで行います。

 

今回は渋谷 カフェを入力します。

それからデベロッパーツールにて検索フォームの要素を取得し、そこに先ほどの変数を入力するようにしています。

そして、クリックする要素を取得してクリックを行います。

 

すると、以下の画像になります。

 

ここでデータを取得することも可能ですが、今回取得する電話番号やWebサイトのリンクは検索結果の一覧から各個別の詳細にもう一度クリックをする必要があります。

なので、赤枠の要素を取得しクリックします。

ようやくスクレイピングをする準備が整いました。

 

7. データの整形を行い、取得したいデータを選択

 

最後にスクレイピングを行います。

このままSeleniumにてデータを取得することも可能ですが、綺麗にデータを取得する際にはBeautifulsoupがオススメですので、今回はこのPythonライブラリを使用してスクレイピングしていきます。

※今回はGoogle mapsのデータ取得のために画面遷移が多く存在したので、Seleniumも使用しましたが、本来スクレイピングする際には基本的にBeautifulsoupで完結します。

先ほど詳細ページに画面遷移したことにより、以下のように表示されているかと思います。

今回は図の赤枠が今回データを取得する要素となります。

ここで、PythonライブラリBeautifulsoupを使ってHTMLのデータを整形していきます。

整形したデータの中から自分が取得したいデータが存在する要素を選択肢し、出力を行います。

そのまま取得した要素を出力すると、class名なども表示されてしまうため、.textにてHTML要素内の文字のみを出力するようにしています。

ターミナルには以下のように出力されていると思います。

8. まとめ

いかがでしたでしょうか?

今回はSeleniumとBeautifulsoupを使ったスクレイピングを解説していきました。

前回のツイッター自動化に比べて少し難しかったと思いますが、このようにSeleniumを使うことで様々なデータを取得できることがお分り頂けたかと思います。

Pythonを学習されている方なら是非扱って欲しいです。

ですが、サイトによってスクレイピングをしてはいけない事もありますので、そこに気を付けながら行ってみてください。

最後までご購読いただき、ありがとうございました!

 

 



ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、現在フリーランス活動中。 2019年2月から起業する予定。 自社サービス及び製品を開発し、売り上げを立てている。