【超初心者が最初から最後まで】pythonのseleniumをサーバー上で動かす(heroku+GitHub)前編

旅行・趣味

どうも、ゆうです!
最近、プログラミングに激ハマり中です。

PyhonをPC上で動かしているのですが、契約しているXSERVER上で動かせば、PCを常に起動し続けなくてもいいのでは?と思い、XSERVERでPythonを動かしてみました!

しかし、私が主にPythonで動かしているのはWebスクレイピングで、xserverはroot権限を与えられないため、どうやってもchromeがインストールできませんでした。。
beautiful Soupは、静的サイトであればxserver上で自動実行できますが、javascriptの操作等が必要な動的サイトでbs4は使用できません。

どうにか、費用をかけずにクラウド上とかで実行する方法を探したところ、herokuというプラットフォームを見つけました!

私は本当に超初心者な上に独学なので、表現も含め間違いがあるかもしれません。ご了承の上、自己責任で参考にしてください。

後編はこちら

ざっくり流れ

PC上(VSCode)のフォルダをリモートでGitHubに同期して、GitHubとHerokuも同期して、Heroku上で動かし、PCの電源が入っていなくても、自動で定期実行させる流れです。

https://note.com/financedog/n/n2044628a508e

Herokuを無料で動かせるのは、1000時間(クレカ未登録の場合は550時間)までで、time.sleepやschedule.run_pending()が動いている時間も含まれます。

定期実行ならHeroku schedulerというAPIを使うことで時間を節約できます。

環境

Mac OS Catalina 10.15.7 64bit 2.5 GHz デュアルコアIntel Core i5
Python 3.9.5(vscodeで作成)

下準備

まずは、herokuとGitHubに登録が必要です。

登録サイトを増やすのは好きではないですが、無料でやる以上、これが最低限のようです。

Herokuの登録

① Herokuの公式サイトへアクセスし「無料で新規登録」をクリック

https://chusotsu-program.com/heroku-getting-started/

② メールが届くので、確認したら登録完了

GitHubに登録

① GitHubの公式サイトへアクセスし「Sign up(登録)」します。

https://camo.qiitausercontent.com/00cc80a03ed02c475cd99cb0bfae3c252bc9ffab/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f38323039302f65366165356230652d363963632d623239662d643565652d6261623266646332646136372e706e67

② Freeプランが選択されているのを確認して「Finish sign up」のボタンを押します。

https://camo.qiitausercontent.com/760efa154f73b8a39f28914551204cb169f0b6b4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f38323039302f65353230393162322d393465622d363565372d303664382d6134363738643834366338322e706e67

③ メールが届くので、確認したら「Verify email address」を押して登録完了

https://camo.qiitausercontent.com/d3be75a82e0a1b72f428f0055136f0708cf08c0a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f38323039302f64646135626337662d373033392d616163342d356331352d3937323134303336356364372e706e67

PC上でプラグラミング

プログラムを保存するフォルダを作成

私は、「デスクトップ > python > heroku」に「test_folder」を作成しましたが、PC上であればどこでもいいです。

作成したフォルダ(test_folder)にプログラムを作成

私は、「main.py」にしましたが、お好みでOK

# main.pyの中身サンプル

# Selenium
from selenium import webdriver
# ChromeDriverのバージョンを合わせるらしい
import chromedriver_binary
from webdriver_manager.chrome import ChromeDriverManager
# ページが読み込まれるまで待機するモジュール
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ChromeDriverのオプション用モジュール
from selenium.webdriver.chrome.options import Options

# ドライバーのパス指定
# driver_path = '/app/.chromedriver/bin/chromedriver' ←ローカル上ではコメントアウト

# Headless Chromeをあらゆる環境で起動させるオプション
options = Options()
options.add_argument('--disable-gpu');
options.add_argument('--disable-extensions');
options.add_argument('--proxy-server="direct://"');
options.add_argument('--proxy-bypass-list=*');
options.add_argument('--start-maximized');
options.add_argument('--headless');

#クローラーの起動
driver = webdriver.Chrome(executable_path = driver_path, chrome_options = options)

# ページへアクセス
driver.get('https://info.finance.yahoo.co.jp/fx/')
# ページが読み込まれるまでの最大待機時間(10秒)
wait = WebDriverWait(driver, 10)
# ページが読み込まれるまで待機
wait.until(EC.presence_of_all_elements_located)

# ドル円を取得
element = driver.find_element_by_id('USDJPY_top_bid').get_attribute("textContent")
# ドル円を表示
print(element)

# ドライバーを終了させる
driver.close()
driver.quit()

PC上での動作確認

ターミナルで、次を記述する。

python /Users/Macのホームディレクトリ/Desktop/python/heroku/test_folder/main.py

Heroku用にプログラムを書き換える

書き換える部分は、以下のコメントアウトしていた箇所

# ドライバーのパス指定
driver_path = '/app/.chromedriver/bin/chromedriver' ←ローカル上ではコメントアウト

必要なファイルを作成

プログラムを保存したフォルダー(私は「デスクトップ > python > heroku > test_folder」)に3つのファイルを作成します。

こんな感じで。
test_folder
├─ main.py
├─ Procfile
├─ requirements.txt
└─ runtime.txt

Procfile

① VSCodeで「test_folder」を選択し、「New File」アイコンをクリックする。

https://variwiki.com/images/d/d1/Vscode_mcuxpresso_newfile.png

② ファイル名は、「Procfile」で、拡張子は要りません。

③ 中身は、次を記述する。

web: python プロジェクト名(今回は「main.py」)

requirements.txt

① VSCodeで「test_folder」を選択し、「New File」アイコンをクリックする。

② ファイル名は「requirements.txt」

③ 中身は、使用するライブラリ名とローカル上と同じバージョンを記述する。

selenium==3.141.0
chromedriver-binary==83.0.4103.39.0

ローカル上のバージョンを確認する場合

ターミナル上で次を記述する。

pip list
https://i.stack.imgur.com/Qxpjn.jpg

runtime.txt

① VSCodeで「test_folder」を選択し、「New File」アイコンをクリックする。

② ファイル名は、「runtime.txt」

③ 中身は、使用するPyhonのバージョンを記述する。

今回は、「python-3.9.0」にします。普段使用しているバージョンでいいですが、herokuに対応しているか確認しましょう。

python-3.9.0

普段使用しているPythonのバージョンを確認する場合

ターミナルで次を記述する。

python -V
https://edunity.hatenablog.com/entry/20200528/1590632931

GitHubでリポジトリを作成

① GitHubへログイン

② 「+ New repository」をクリックして、リポジトリ(PC上のフォルダと同期するクラウド上のフォルダ)を作成する。

https://qiita.com/kooohei/items/361da3c9dbb6e0c7946b

③ リポジトリ名を入力(私は、「test_repository」)、
④ 「initialize ~」にチェック入れて、
⑤ 「Create repository」ボタンで作成。

https://note.com/kazuyamano/n/na9cc1cd4f490

続き

後編では、いよいよ3つを繋いでいきます!

コメント

スポンサーリンク

タイトルとURLをコピーしました