どうも、ゆうです!
最近、プログラミングに激ハマり中です。
PyhonをPC上で動かしているのですが、契約しているXSERVER上で動かせば、PCを常に起動し続けなくてもいいのでは?と思い、XSERVERでPythonを動かしてみました!
しかし、私が主にPythonで動かしているのはWebスクレイピングで、xserverはroot権限を与えられないため、どうやってもchromeがインストールできませんでした。。
beautiful Soupは、静的サイトであればxserver上で自動実行できますが、javascriptの操作等が必要な動的サイトでbs4は使用できません。
どうにか、費用をかけずにクラウド上とかで実行する方法を探したところ、herokuというプラットフォームを見つけました!
後編はこちら
ざっくり流れ
PC上(VSCode)のフォルダをリモートでGitHubに同期して、GitHubとHerokuも同期して、Heroku上で動かし、PCの電源が入っていなくても、自動で定期実行させる流れです。
環境
Mac OS Catalina 10.15.7 64bit 2.5 GHz デュアルコアIntel Core i5
Python 3.9.5(vscodeで作成)
下準備
まずは、herokuとGitHubに登録が必要です。
登録サイトを増やすのは好きではないですが、無料でやる以上、これが最低限のようです。
Herokuの登録
① Herokuの公式サイトへアクセスし「無料で新規登録」をクリック
② メールが届くので、確認したら登録完了
GitHubに登録
① GitHubの公式サイトへアクセスし「Sign up(登録)」します。
② Freeプランが選択されているのを確認して「Finish sign up」のボタンを押します。
③ メールが届くので、確認したら「Verify email address」を押して登録完了
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」アイコンをクリックする。
② ファイル名は、「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
runtime.txt
① VSCodeで「test_folder」を選択し、「New File」アイコンをクリックする。
② ファイル名は、「runtime.txt」
③ 中身は、使用するPyhonのバージョンを記述する。
今回は、「python-3.9.0」にします。普段使用しているバージョンでいいですが、herokuに対応しているか確認しましょう。
python-3.9.0
普段使用しているPythonのバージョンを確認する場合
ターミナルで次を記述する。
python -V
GitHubでリポジトリを作成
① GitHubへログイン
② 「+ New repository」をクリックして、リポジトリ(PC上のフォルダと同期するクラウド上のフォルダ)を作成する。
③ リポジトリ名を入力(私は、「test_repository」)、
④ 「initialize ~」にチェック入れて、
⑤ 「Create repository」ボタンで作成。
続き
後編では、いよいよ3つを繋いでいきます!
コメント