はじめに
こんにちは、自動化大好きまっきーです。今回はPythonで書いたスクレイピングのコードを無料で定期実行する方法について解説したいと思います。
これを使えばいちいち自分のPCを起動して実行しなくても、クラウド上で勝手に実行してくれるようになります。
今回使用したPythonコードはこちらです。
https://github.com/makkynm/HerokuBlogMura.git
今回のテーマ ~Heroku~
Herokuというクラウドサービスの無料枠を使って定期実行を行っていきます。
覚えてほしいこと
Herokuを使えば無料でPythonを定期実行できる
やりたいこと - ブログ村の自動クリック
私はスクレイピングで主にSeleniumを使用していますが、Pythonでコードを書いたものの、ターミナルから自分で定期実行することが面倒で自動化したいと思っています。定期実行したいことはたくさんあり、、
Twitterのいいねを自動で行いたい。
毎日の株価をスクレイピングで取得したい
ブログ村のランキングクリックを自動化したい。
出会い系アプリのフリックを自動で行いたい。
。。。。
その中でも、今回は私のブログのブログ村の自己クリックを定期実行してみたいと思います。
もちろん、タスクスケジューラで実行することもできますが、PCを常にONにしておくのは電気代もかかりますし、やりたくありません。
そこで、無料のクラウドサーバーHerokuを使用して定期実行を設定したいと思います。
使用環境
使用したMacはこちらです。
最新 Apple MacBook Pro Apple M1 Chip (13インチPro, 8GB RAM, 512GB SSD) - シルバー
- 発売日: 2020/11/17
- メディア: Personal Computers
事前準備
Herokuにアカウント作成
公式サイトから無料でアカウントを作成してください。
Herokuのインストール
Rosetta2なしでもいけます。やってみましょう。
Step1 - terminal を開く
まずターミナルを開きます。現在使用しているのは、ARM環境のターミナルです。
Rosetta2を使用しているか、ARMを使用しているかは下のコードから確認できます。
Step2 - Homebrewのインストール
まず、Homebrewをインストールします。ARMネイティブにも対応したので、下記の記事を参考に、Homebrewをインストールしてみてください。
Step3 -Heroku CLIをインストールする
下記のコードをコマンドプロンプトに打ち込むと、インストールが開始されます。
引用:Heroku CLI | Heroku Dev Center
Step4 - インストールされているかを確認
最後にインストールされているかどうか確認していきます。
無事にダウンロード完了してそうですね!
Heroku実行用コードを準備
1. 必須 - Chromeドライバのパス変更
実際に使用するPythonのコードを少し変更します。Chrome Driverのパスを下記のように書き換えます。
HerokuでのChrome Driverの設定と、実際にDelpoyした時にメモリ不足が発生するのを防ぐためにOptionを加えています。
参考:herokuでselenium利用時にクラッシュする場合の解決方法 - Qiita
2. 必須 - requirements.txtでライブラリ指定
Importするライブラリをここで指定します。コマンドでテキストファイルを作る場合は下記を入力します。
いちいち面倒だなーという人は、下記のコードを打ち込めば現在LocalのPythonでImportされているライブラリを全出力することができます。
バージョンを指定する場合は、下記のように記述します。
テキストファイルを作ってしまって直接打ち込んでしまった方が楽かもですね。
3. 必須- Prockfileでコマンド指定
HerokuでPythonのファイルを実行する際に入力するコマンドを指定するファイルを用意します。個人的には必須かどうかは?です。
があればOKです。拡張子はなしのファイルみたいです。コマンドでファイルを作る場合は下記を入力します。
4. 任意 - rentime.txtでバージョン指定
私は準備しませんでした。
このファイルはPythonのバージョンを指定するファイルです。このファイル自体なかったらHeroku側で定義されたデフォルトのバージョンを使用されます。
Herokuで対応可能なPythonのバージョン情報については下記のページを要確認
Heroku Python Support | Heroku Dev Center
Gitに定期実行したいコードをPush
事前準備として、Gitに定期実行したいファイルがPushされたリモートリポジトリを用意しておきます。
Gitは、M1 Macは基本デフォルトですでにインストールされているので割愛しています。
GitHubの使い方が分からない方は、こちらの記事がオススメです。
【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践~とりあえず一緒に動かしてみようぜ!~ - Qiita
例として、Seleniumでスクレイピングを行うPythonのファイルを使用します。このPythonファイルのコードは下記で公開されています。このリモートリポジトリを定期実行に使用します。
https://github.com/makkynm/HerokuBlogMura.git
Herokuで定期実行を設定
さて、インストールが終わったのでこれからは実際にPythonファイルをHerokuで定期実行する方法について触れたいと思います。
必要ファイルをGitにPushする
定期実行に必要なファイルは、下記の3ファイルです。
- *.py -(必須)Pythonファイル
- requirements.txt -(必須)ライブラリの指定ファイル
- Prockfile - (必須?) コマンドの指定ファイル
- rentime.txt - (任意)バージョン指定ファイル
これらをGitでPushしていきます。
https://github.com/makkynm/HerokuBlogMura.git
Herokuにアプリを作成して連携する
さて、事前準備が整ったので早速定期実行を設定していきましょう。
Herokuにログイン
まず下記をTerminalに打ち込んでHerokuにログインします。下記のコードを実行して、Enterを押すと、ログイン用ページがブラウザで開きます。ログインして閉じます。
Herokuにアプリ作成
下記のコマンドでアプリを作成します。herokublogmura という部分がアプリの名前になります。小文字のみで、英字から始まっている必要があります。英数字が指定できます。
確認
HerokuにWebからログインして、アプリが作成されていることを確認します。
ChromeDriverとChromeを使えるようにする
この時点では、まだスクレイピングできない状態にあるので、アプリの設定から変更していきます。
WebからHerokuにログインして、Settingsを開いてください。
アプリの設定から、Buildpacksという項目にいき、下記の2つのURLを追加します。
それぞれ、ChromedriverとGoogle Chromeを使えるようにするためのものです。
https://github.com/heroku/heroku-buildpack-chromedriver.git
https://github.com/heroku/heroku-buildpack-google-chrome.git
Pythonを使えるようにしないといけないので、pythonの実行環境も整備します。
Herokuにファイルを同期させる
最後に、ターミナルに戻ってファイルをHerokuに連携します。下記コードでPushされます。
コンパイルのような作業をしているようです。完了まで時間かかります。
実行してみる
下記コマンドで実行できます。
Heroku上で実行できたと思います。
定期実行の設定を行う
さて、最後に定期実行のスケジュールを設定していきます。
クレジットカードの登録
定期実行する場合はAddonを追加する必要があります。そしてそのためにはクレジットカードの登録が必要です。プランを変えない限り課金されることはないみたいです!
登録方法は、アカウントアイコンからAccount settingsを選び、Billingを選択するとクレジットカード登録画面があります。
Add onを追加する
下記コマンドを打ち込むと、Add onが追加されます。クレジットカードを登録していないと、エラーで怒られます。
Add onの設定画面を開く
Add onの設定から定期実行の時間を指定していきます。下記コマンドを打つと、設定画面が開きます。
Webからこの画面に行くことも可能です。
定期実行を設定
最後に、Create jobのボタンから定期実行の設定をしていきます。
スケジューラの設定は
- タイミング
- コマンド
- マシンスペック
を指定すると完了です。
タイミングの設定
このタイミングの時間は、UTCで設定されます。朝6時に定期実行したい。とすると、UTCは+9時間なので、15時に設定します。
今回は毎日実行を選択しましたが、数時間ごととかも可能です。
コマンドを設定
次に実行コマンドの設定です。Prockfileと同じような書き方で問題ないでしょう。
マシンスペックの設定
何も考えず、デフォルトのStandard-1Xでいいと思います。
結果の確認
定期実行できているか確認してみましょう。 0時を超えた時点で自分のPCから自己クリックしておきました。
ブログ村のアクセスはIPアドレスで特定しているので、Herokuで定期実行すると、自己クリックではなく、他人がクリックしたことになります。
なので、INポイント、OUTポイントが朝6時を過ぎたら10から20になれば定期実行されていることになります。なってそうですね。
おわりに
お疲れ様でした。今回はPythonの無料定期実行について解説しました。定期実行がクラウド上でできるようになると、スクレイピングの活用の幅がかなり広がりますよね!
使っていきたいです。
本ブログでは自動化に関する内容を紹介しています。よかったら見てください。ではまた!
余談
Mac M1を購入している方へのおすすめをあげておきます。
おすすめTypeC変換器: 7 in 1
私はこちらを購入しました。HDMIとVGAがついているので、拡張画面や発表するときには安心ですよね。また、USBポートはもちろん、TypeC、SDカードも含まれているので、これさえあれば最低限カバーできるはずです!
TypeC変換器 その2: 10 in 1
有線のLANケーブルのポートも欲しいという方はこちらをお勧めします。また、USBポートが3つついていることも魅力ですね。
先ほどあげた、SDカード・HDMI・VGA・TypeCも含まれているので、これさえあれば充分ですね!
Macbook用バック
あんまり傷つけたくないですよね。保護できるカバーも少しスマートに見えそうなものを選びました。
参考リンク
- Herokuホーム:Heroku
- GitHubについて:【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践~とりあえず一緒に動かしてみようぜ!~ - Qiita
- 使用したコード:https://github.com/makkynm/HerokuBlogMura.git
- Heroku定期実行に関するブログ:
herokuでselenium利用時にクラッシュする場合の解決方法 - Qiita