2017-06-25

【Pythonで定期処理】 Cloud9を利用して、Seleniumでherokuから定期実行する

Python Cloud9を利用して、定期処理をherokuから行う




Cloud9というIDEを利用して、PythonからSeleniumを利用し、あるサイトでいいねを自動化するプログラムを作った。


これを定期実行を行いたい。検索してみると、crontabを使えば定期実行ができるようだが、cloud9上では実行できないらしい。


ほかの代替案を考えたとき、heroku schedulerを利用して定期実行を行えるのではと思い、やってみたらうまくいった。その時の作業ログを残しておく。特に詰まったところ。


手順としては


・bottleを使ってherokuにdeploy
・heroku schedulerに接続
・heroku schedulerに実行プログラムを入力

pythonプログラムをherokuにdeployする


実行したいプログラムをherokuにdeployする。herokuにdeployするところまでは下記参照。これ通りにやれば、ひとまずherokuにdeployするまではできまする。


【ローカル環境構築不要】Cloud9で作ったPythonのbottleアプリケーションをHerokuにdeployする - Qiita http://qiita.com/masaibar/items/86dd57efd50ab729ccf6


Selenium関係のインストール


あとは自分のseleniumを使うアプリケーションのファイルをcloud9上のrootディレクトリに保存する。


その後以下をインストールする。


$ pip install selenium
$ pip install crontab
$ npm install phantomjs


で、heroku上で環境を構築するために、requirements.txtを作成する。


$ pip freeze -l > requirements.txt

requirements.txtから、つかわない以下の項目を削除する。


ちなみに今回はここで詰まって、3日間解決できなかった。結局、scipyはherokuだと動かないらしい。なので、自分のアプリケーションとは関係ないmoduleは全部削除しておく。


matplotlib==1.3.1
pygobject==3.12.0
python-apt==0.9.3.5ubuntu2
python-dateutil==2.0
unattended-upgrades==0.1
scipy==0.13.3
numpy==1.8.2
requests==2.2.1
numpy==1.8.2


で、普通にgitにcommitした後に、herokuにpushすれば大丈夫。


$ git push heroku master

これでdeployがうまくいったみたい。


Heroku Schedulerと接続する



herokuスケジューラーを起動する。heroku schedulerはdeployしたファイルを定期実行してくれる。10minutes, hourly, dailyで実行を決められる。djangoとか使わなくても、シンプルなpythonプログラムをコマンドで実行できるので今回はこれを利用した。


$ heroku addons:create scheduler:standard



で、今度はherokuで実行するスケジュールをセットする


$ heroku addons:open scheduler


Opening https://addons-sso.heroku.com/apps/d5087dc6-6949-4335-bd42-3f13150fa199/addons/9a753940-5305-4b2e-b520-a7cc80f7655e...


実行するとこんな感じのURLが出てくる。


クリックするとタスクの設定画面に移動する。やりかたは下記参照。


簡単!Herokuで動くTwitter botをPythonで実装する - Qiita http://qiita.com/enomotok_/items/41275dd904c8aa774e72


こんな感じで、スクレーピングするプログラムを自動定期処理できることができました。Cloud9からできるのいいね!



Python データ分析入門マニュアルに戻る

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...