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

当ページのリンクには広告が含まれています。

前々回の記事では、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公式ページでご確認下さい。

Seleniumを使うための準備

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

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

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

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

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

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

Seleniumのバージョン4.3.0以降は、インストールされている Chromeブラウザバージョン応じたドライバープログラムを、自動でダウンロードしてくれます。

ダウンロード場所は下記のフォルダになりますので、もしバージョン違い等の不具合が発生した場合は、このフォルダにある schromedriver.exe を更新して下さい。

  C:\Users\<ユーザー名>\.cache\selenium\chromedriver\win64\<Chromeブラウザバージョン>

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

Chromeブラウザのバージョン確認方法は次の通りです。

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

本来は手動でのダウンロードは必要ありませんが、念のため chromedirver.exe の入手先を共有しておきます。

あわせて読みたい
ChromeDriver - WebDriver for Chrome - Downloads Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON ...

インストールする

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

インポートする

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

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

1行目、2行目は必須ですが、3行目、4行目は selenium 経由でブラウザ内のタグを検索したり、値をセットしたい場合に役立つものなので、必要に応じて記述して下さい。

Selenium を使ってみる

使い方は簡単で、webdriver.Chrome() によりインスタンスを生成し、Seleniumに用意されている様々なメソッドを呼び出すだけです。

例えば、get() メソッドで ブラウザに表示されているページのHTMLが取得でき、さらにfind_element(By.NAME,”要素名”)で要素を検索してテキストを取り出したり、その要素に対してキーを入力することが出来ます。

Options() のオブジェクトを引数で渡すことで、Chromeドライバの起動時にパラメータを渡して、動作を変えることができます。

例えば、options.add_argument(‘–headless’) を指定すると、ブラウザを非表示にした状態で処理を行う事が出来ます。

selenium で用意されている find_element() を使えば、要素の値を取得できますので、簡単なページ解析程度であれば BeautifulSoup を使わなくても、selenium だけで済ませることも可能です。

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

前回記事で紹介した共通クラス(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をコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次