search
LoginSignup
38

More than 5 years have passed since last update.

posted at

updated at

サーバー上(Ubuntu16.04)で、Webブラウザを自動実行することで、Web上の特定のデータを定点観測する(1)〜Webブラウザインストール編〜

目的

リアルタイムに値の変わるデータがWEB上にありました。その値を定期的にチェックするプログラムを作ることになったわけですが、ページにログインする必要があったりと、スクレイピングのコードを書くのが面倒でした。その対策としてseleniumを使ってWebブラウザを操作し、スクレイピングをすることにしました。その過程を備忘録的にまとめていきます。

なお、手元のPCを使い、Webブラウザをバッチ処理で自動実行しても良かったのですが、、、普段使いの自身のPC上で、勝手にWebブラウザが立ち上げるのは邪魔だったので、レンタルサーバ上(Ubuntu16.04)で勝手に動かすようにします。

より具体的には以下のイメージになります。
(1)python経由でWebブラウザを立ち上げる → Part1(本投稿)で説明
(2)seleniumでWebブラウザを操作し、WEBデータを処理する → Part2で説明
(3)処理したデータをmongoDBに格納する → Part3で説明
(4)(1)〜(3)を実行するpyプログラムをcronで自動実行する → Part3で説明
(5)値に一定の変動があった場合メールで知らせる → おまけ編で説明

環境

OS : Ubuntu16.04 (さくらVPS)
python : python3.5

Step1) Webブラウザの選定

初期は、Google Chromeを作業をしていたが、いくつかの点でヘッドレスブラウザであるPhantomJSが良いことが分かったため、PhantomJSを使うようになりました。
PhantomJSを選定した理由は以下の点になります。

  • Javascriptで取得しているデータもスクレイピングできる
  • Chromeと違い、PhantomJSはGUIが無いので仮想ディスプレイが不要

※もし、何かしらの事情でChromeを利用したい場合は、こちらにChromeの話を書きましたので、ご参照ください。

Step2) PhantomJS 2.1.1のインストール

以下の手順でPhantomJSをインストールしました。

$ wget -O /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
$ cd /tmp
$ bzip2 -dc /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 | tar xvf -
$ sudo mv /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
$ phantomjs --version
> 2.1.1

最後の行のバージョン確認で、インストールした意図したバージョンが表示されれば完了です。

(参考URL) http://bit.ly/2bRGnYI

Step2) Seleniumをインストールする

Web上のデータを定点観測するためにSeleniumを利用する。
Seleniumとは、WEBアプリケーションのテストツールの1つです。人がブラウザを操作する代わりにSeleniumがブラウザを操作をしてくれます。

Seleniumはプログラムコードで操作をすることができますが、要するに、Seleniumを使えばプログラムでブラウザを自由に操作できるようになります。例としては、「loginという名前のbuttonをクリックする」「useridという名前のテキストボックスにメールアドレスを自動入力する」などの操作ができます。現在開いているページのHTML文を取得することもでき、それによってスクレイピングを行ったりします。

私はpython3でseleniumを操作しました。
pip3のインストールも含め、以下の手順でseleniumをインストールします。

sudo apt-get install python3-setuptools
sudo easy_install3 pip
pip3 install selenium

Step3) SeleniumとPhantomJSのテストプログラム

SeleniumとPhantomJSを使って、Googleのページを起動して、Googleのtitleタグの値を取得してみましょう。

seleniumテストプログラム
import time
from selenium import webdriver

browser = webdriver.PhantomJS(executable_path='<path/to/phantomjs>')
browser.get("http://www.google.com")
time.sleep(3)

print(browser.title)

browser.close()

上記のコードは直感的に分かりやすく、seleniumが初めての方でも戸惑うことはほとんどないと思います。"Google"と出力されれば正常にプログラムが動いています。

1点だけ注意が必要なのは、4行目です。
webdriver.PhantomJS()でPhantomJSを呼ぶ時に、引数にphantomJSのパスを記述する必要があります。上記のコードにある通り、webdriver.PhantomJS(executable_path='...')という形でパスを指定してください。 パスが分からない場合は、

which phantomjs

で返ってきた値がパスなのでその場所を指定しましょう。

なお、5行目は browser.get(...)で指定したURLにGETリクエストを送っています。取得したレスポンスはbrowserの中に格納され、browser.titleでGoogleのtitleタグの値を出力することができます。

seleniumやPhantomJSの起動が確認できたところで、次は実際にスクレイピングをして特定のデータを抽出したいと思います。

続きは続編の(2)にて。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
38