Herokuの無料プランでスクレイピングをする

2018年10月17日 00時10分

ずっとメイン PC でスクレイピングさせていたのですが、音が気になって睡眠の質がめちゃくちゃ悪化しました。

ようやくサーバー上で稼働するように変更しようと腰をあげました。

開発言語python3.7
パッケージ管理pipenv
herokuプランFree
OSWindows10 pro 64bit

Heroku は PaaS の一つです。今回 Heroku を選んだのは、小さく始めるのに最適だったというのが一つです。Heroku には無料プランがあり、無料プランでもクレジットカードを登録すれば、1月あたり1000時間の稼働時間を確保できることです。ひと月は744時間なので、1つのアプリだけなら24時間稼働が可能です。

他のアプリも制作するようになれば、AWS を利用していきたいとは思いますが、まだ早いといいますか。

【宣伝】 10月20日(土)の10時から、福山 IT 座談会を行います。

近隣の方、ご興味があればぜひconnpass ページより申し込みの方お願いいたします。

前回レポートはこちら

Heroku の登録

登録も無料です。料金プランはいろいろありますが、今回は前述した通り無料プランを選択。

Herokuから登録してみましょう。日本語なので、わかりやすいですね。

登録が終わるとメールがくるので、認証しておいてください。

2018 10 17 12h31 13 1

2018 10 17 12h31 31

チュートリアルをする

緊急性がない場合は、チュートリアルをして実際に設定から稼働までを体験した方が感覚がつかめると思います。特に、Heroku 上でアプリを稼働させる場合までのチュートリアルが言語ごとに提供されているので、余裕のある方はそちらをやることをお勧めします。

Dev Centerにアクセスしてもらって、任意の言語のアイコンをクリックするとドキュメント及びチュートリアルページが表示されると思います。

2018 10 17 12h42 20

python のドキュメントページだと、

赤い四角の部分をおすとチュートリアルがはじまります。

パッケージインストール

チュートリアルは割愛しますが、いくつかパッケージをインストールする必要があります。

今回は python を使っているので、python をインストール。

Heroku は Git 必須ですので、Git の導入がまだの方はこちらから。

PipenvPostgresを pip で。

それから Heroku Command Line Interfaceを windows の場合は、インストーラーで導入します。macOS の場合は、

$ brew install heroku/brew/heroku

でインストールできます。

ログイン等

パッケージを導入できるとコマンドライン上から heroku コマンドが実行できるようになっているはずです。

早速 heroku login でログインしてみましょう。

heroku login
Enter your Heroku credentials.
Email: user@example.com
Password

次に、heroku 上にアプリケーションを作ります。

cd dev
heroku create fukushidb

先に開発用のルートフォルダに移動します。

これは heroku create をすることで自動的に heroku create した先が heroku のリモートリポジトリとして登録されるためです。

fukushidb はアプリ名ですが、入力が無い場合は自動でアプリ名が設定されます。

このアプリ名は後から変更可能です。

push する前に準備

① ドライバーの変更

※chromedriver でスクレイピングをしない方はスキップ

ローカルでは chromedriver の存在するパスを明示していたと思いますが、heroku 上でも稼働させる場合、そうではなく、heroku 上の Buildpacks を利用することになります。

そのため、selenium を起動する際のコード本文は以下のように変更します。

options = Options()
# 追加
options.binary_location = '/app/.apt/usr/bin/google-chrome'
options.add_argument('--headless')
# コメントアウト
# browser = webdriver.Chrome(executable_path=r'D:\Program\chromedriver.exe', chrome_options=options)
browser = webdriver.Chrome(chrome_options=options)

それと、heroku 側にもブラウザの場所を教えておきます。

app の setting 内の Buildpacks に以下の2つを追記します。

2018 10 17 13h09 45

2018 10 17 13h11 10

https://github.com/heroku/heroku-buildpack-google-chrome.git

② パッケージの移行

インストールしてあるパッケージの依存関係については、パッケージ管理ツール、python では Pipenv を使用することで本番環境へスムーズにデプロイすることができます。

pipenv install

これで Pipfile, Pipfile.lock ファイルが生成される。

初期ファイルには selenium が含まれていなかったので、以下のコマンドで追加する。

pipenv install selenium

他のパッケージも同様に pipenv install [package]でインストールすることで、Pipfile に追記していける。

③ ファイルの作成

・Procfile について

登録したいコマンドを登録する

hoge: python fuga.py

・日本語フォントについて

heroku は日本語フォントに対応していないので、ルートディレクトリ内に.font ディレクトリを用意することで、ディレクトリ内のフォントを使用してもらうことができる。

今回は、IPAex フォントを使用する。.font ディレクトリに.ttf ファイルを入れて終わり。

push!

git push heroku master

で push しましょう。

起動する

heroku ps:scale hoge=1

heroku 上の Procfile に書いてある hoge をワーク1として実行します。

おまけ ログを見る

app メニュー内に Viewlog があります。

こちらに print 等で記載されているものについては閲覧することができます。

2018 10 17 13h33 01