pythonとselenium
先日、帰ってきた兄とpythonとseleniumについて話をしました。
これらはウェブスクレイピングと言って、ブラウザの操作を自動化し情報収集を行うものです。
本来は自作のウェブアプリのテスト用に作られたものらしいですけど、その便利さから情報収集用途に使われているそうです。
興味もあったので勉強がてら導入してみました。
導入
プログラム自体はそんなに難しくないのですが、一番難しいのが導入部分
複数のアプリケーションを入れたり、環境変数を設定したりしなければいけません。
また設定にコマンドラインを操作する必要があります。
詳しい解説は他サイトに任せるとして、大雑把な流れは
- Pythonの導入・環境設定・パス通し
- Chrome用のWebDriverをダウンロード・パス通し
- Pythonのpipコマンドでseleniumのインストール、各種アップデート
といった感じ
このパス通しが地味に面倒です。
コントロールパネルから環境変数を弄ってPythonとpipのフォルダを基準ディレクトリに追加したり
WebDriverもpythonと同じフォルダに置いて、パス通しをします(やり方忘れた)
cmd.exeを管理者権限で起動しないとpipのアップデートコマンドが使えなかったりと色々苦戦しました
ウェブスクレイピング
実際のウェブスクレイピングの流れは
Pythonコードを書き、そのコードからseleniumの機能を呼び出すと言った形になります。
私はpyファイルをpythonに実行させるためにbatファイルを使っています。
コードの内容として、特定のWebページを開いて、HTMLタグを検索し、オブジェクトを特定、そのオブジェクトに特定の操作をするといった流れになります。
例として、楽天銀行に自動ログインする手順をあげると
- ユーザー名を入力するテキストボックスを探す
- テキストボックスをクリアし、ユーザー名を入力
- パスワードを入力するテキストボックスを探す
- パスワードを入力
- ログインボタンを押す
と言った流れ
import time
from selenium import webdriver
#ログインURLとユーザー名・パスワード
url = "https://fes.rakuten-bank.co.jp/MS/main/RbS?CurrentPageID=START&&COMMAND=LOGIN"
username = 'username'
password = 'password'
#Chromeのユーザープロファイルフォルダ(最後のDefaultを外す)
user_profile = 'C:\\Users\\XXXXXX\\AppData\\Local\\Google\\Chrome\\User Data'
#指定ユーザープロファイルでChromeを起動
options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir=' + user_profile)
driver = webdriver.Chrome(options=options)
driver.get(url)
name_box = driver.find_element_by_name('LOGIN:USER_ID')
name_box.clear()
name_box.send_keys(username)
pass_box = driver.find_element_by_name('LOGIN:LOGIN_PASSWORD')
pass_box.send_keys(password)
driver.find_element_by_class_name('btn-login-01').click()
これが楽天銀行に自動ログインするコードです。
(コード内にパスワードを入れるのはちょっと怖いですね)
これを関数化すれば色んなサイトへのログインを自動化できます。
家計簿をつけるため、月初めに各種銀行サイトを同時に開くみたいなのも1ボタンで出来るようになります。
URL収集
リアルタイムにランキングを表示するサイトなどから定期的に情報収集させるなんてことも出来ます。
pythonのsetコンテナを使えば、URLの重複を防ぐ事が出来るので
確認作業の手間を大幅に減らせます。
ランキングに紛れて、急浮上した商品などを見つけるのも容易ですね。
driver.refresh()を呼び出せばF5更新と同じ効果があります。
周期的にaタグを検索し、hrefからURLを取得しsetに追加します。
setコンテナは引き算するだけで重複を削除できるので
確認済みのsetコンテナを用意しておけば、新しいものだけを表示することができます。
あらゆるブラウジング操作を自動化できるとなれば
可能性は無限大ですね。
最近のコメント