【直ぐに使える】Pythonとseleniumでログイン認証&スクレイピング!

Python入門
この記事は約7分で読めます。

前々回の記事では、requests と BeautifulSoupを使ったスクレイピングについて紹介し、前回の記事 では今後使えそうな機能をクラスしてみました。

今回は、request の代わりに selenium を使ってスクレイピングをしましたので、その方法について解説したいと思います。

selenium で抜き出したHTMLは前回紹介した共通クラスを使って情報を抽出していますので、共通クラスの使い方をもう少し知りたいも、是非ご一読ください。

今回の背景

実は、このブログは Cocoon というWordPress用のフリーのテーマを使っており、管理者画面では記事毎の統計情報(日毎、週毎、月毎、及び記事公開から今日までのアクセス件数)が見れるようになっています。

これを分析すれば、どの記事が興味をもたれているかが分かるので、スクレイピングで収集しようと試みたところ、そもそも管理者画面に入るにはIDとパスワードが必要となり、前回までの方法では出来ないことが分かりました。

requests を使って、URLの要求時にIDとパスワードを送って認証させる方法もあるのですが、それで対応できる方法はベーシック認証などごく一般的なもので、残念ながらWordPressの場合はこの方法が使えません。

それなら、selenium を使って画面からIDとパスワードを入力するのが手っ取り早そうだと判断し、今回の記事に至ります。

selenium とは

スクレイピングを行う上でよく使われるライブラリとして、Requests、BeautifulSoup、Seleniumがあることは前々回の記事でも説明いたしました。

Reauests はブラウザを表示することなく、直接WebサイトとHTTP通信が行えるライブラリです。

それに対して、Selenium は Chromeなどの既存ブラウザをPythonから操作するためのライブラリです。

旅行に例えて言うなら、自分が直接宿泊施設に電話して宿を押さえてもらうか、旅行会社(この場合はSelenium)に頼んで宿を押さえてもらうかの違いです。

もともとCeleniumはWebアプリのデバッグ用として開発されており、あたかも人が画面操作するのと同じことを自動で行わせることで、テスト作業を効率化するものです。

しかし、これを利用することで、あたかも人が操作しているようにスクレイピングが可能になります。

つまり、スクレイプされる側のWebサイトは、人がやっているのか自動でやっているのか全く区別がつきません。

selenium の使い方

Selenium は ブラウザごとに用意されたドライバープログラム(Chrome の場合は chromedriver.exe)をダウンロードし、このドライバープログラムを通じてPython 側からブラウザを制御します。

Pythonにimport したSeleniumライブラリは、あくまでも chromedriver に対して命令を出すだけで、実際のブラウザ制御は chromedriver.exe が担当します。

Seleniumを使うための準備

使うための準備は3つです。

1つ目は、ドライバープログラムをダウンロードして所定のフォルダに置くことです。

2つ目は、Pythonにライブラリをインストールすること。

3つ目は、インストールしたライブラリをインポートすること。

では、順を追って説明していきます。

ドライバをダウンロードして所定のフォルダに置く

今回は chrome を使うことを前提にしていますが、他のブラウザを seleniumuで制御したい場合も同様の手順になります。

あらかじめ、お使いのchromeのバージョンを確認しておきます。

ちなみに、2021年12月時点で、私の環境では バージョン: 96.0.4664.110(Official Build) (64 ビット)でした。

次に、こちらのサイトから お使いのchrome のバージョンに合ったchromedirver.exe をダウンロードして下さい。

ChromeDriver - WebDriver for Chrome - Downloads
Current Releases If you are using Chrome version 97, please download ChromeDriver 97.0.4692.36 If you are using Chrome version 96, please download ChromeDriver...

画面をスクロールしていくと、バージョンと一致するドライバープログラムが見つかると思います。

クリックするとダウンロードできますので、どこか好きな場所に保存して下さい。

PythonでSeleniumuを使う段階で、このドライバプログラムのフルパスが必要になりますので、場所は控えておいてください。

インストールする

インストール方法ですが、PythonをAnaconda経由でインストールされた方は conda を使って、Python公式サイトからPythonをインストールされた方は pip を使ってインストールします。

インポートする

次に、プログラムをインポートします。

これは次の様に記述します。

1行目は必須ですが、2行目は seleniumu 経由でブラウザにキー入力したい場合に役立つものなので、単純にスクレイピングするだけなら必要ありません。

Seleniumu を使ってみる

使い方は簡単で、ドライバープログラムのフルパスを引数としてドライバーのインスタンスを生成し、そのインスタンスに対して、get メソッドを呼ぶとHTMLが取得できます。

また、find_element_by_xxxx という具合に、要素毎に検索してテキストを取り出したり、その要素に対してキーを入力することが出来ます。

下記のサンプルは、1行目が「fドライブ直下に置かれた chromedriver」 を使うコードです。

フルパスと言いましたが、exe は省略できます。

2行目は任意のWebサイトのページを読み込み、3行目で name=’log’ の要素を検索し、それに対して’aaaaa’+エンターキーを入力しています。

find_element_by_xxxxx メソッドでテキストを使えば、必要な要素を取得することは可能ですが、HTMLの解析はBeautifulSoupの方が使いやすいです。

従って、Seleniumで覚えることは、上記の3行くらいで十分で、後はBeautifulSoupを使ってHTMLを解析することをお勧めします。

前回記事で紹介した共通クラスにメソッドを追加

前回記事で紹介した共通クラス(Scrape)に、1つだけメソッドを追加しました。

get_soup(thml) というメソッドで、引数にHTMLを渡すと、BeautifulSoup のインスタンスが返ってくるというものです。

今回は request メソッドは使わず、Seleniumu 経由でHTMLを取得するための処置です。

尚、Seleniumu で取得したHTMLを BeautifulSoup で解析する場合、次の様に記述する必要があります。

Cocoonの統計情報をスクレイピングする

下記はこのブログの管理画面です。

赤く囲っている部分がスクレイピングで取得したい箇所になります。

一応ソースは掲載しておきますが、今回はスクレイピングの内容が特殊なので、HTMLの解析に関する解説はしません。

使い方の具体例としてご利用いただければと思います。

しかし、WordPressのテーマでCocoonを使っている方であれば、ユーザー名とパスワード、ドライバープログラムのパスと、CSVを出力するパス及びファイル名を修正して頂ければ、統計情報のCSVが入手できます。

まとめ

今回はSeleniumの使い方と、それを使って WordPress のログイン認証を行い、統計情報をCSVに保存するという少々ニッチなスクレイピングについて紹介いたしました。

実は、WordPress が使っているデータベースに統計情報は保存されているので、それを見るのが手っ取り早いかもしれません。

しかし、DBを直接参照する際に、誤った操作でデータを壊してしまうリスクも少なからずあるので、これが一番安心安全です。

この記事が皆様のスクレイピングの参考になれば幸いです。

タイトルとURLをコピーしました