Python

【Heroku】Python+Seleniumのスクレイピング環境を構築する

この記事は約5分で読めます。

 

先日herokuでPythonからseleniumとchromedriverを起動させて定期的にブラウザ画面の情報をスクレイピングするプログラムを実装したのですが、chromedriver の環境変数設定とかbuildpackとかでいろいろとはまったので手順をメモしておこうと思います

 

前準備

 

HerokuのアカウントとHeroku-CLIは導入済みの前提で話を進めます。アカウントやCLIのインストールがまだの人は以下の記事を参考にしたりググってみてください

 

関連記事:Python製プログラムを「Heroku scheduler」を使って無料で定期実行する

 

Herokuの設定

 

通常のプログラムのデプロイとは別に環境変数とビルドパックの設定をWebサイトから行う必要があります。ダッシュボードからseleniumを実行したいプロジェクトの個別ページにアクセスしてsettingから以下の情報を追加します

 

環境変数の設定

 

 

Key Value
CHROMEDRIVER_PATH /app/.chromedriver/bin/chromedriver
GOOGLE_CHROME_BIN /app/.apt/usr/bin/google-chrome

 

buildpack

 

Settings > BuildpacksセクションのAdd buildpackから以下の3つを追加します。

スクリーンショット 2019-11-16 21.12.36.png

Buildpack URL
python heroku/python
chromedrive https://github.com/heroku/heroku-buildpack-chromedriver.git
google-chrome https://github.com/heroku/heroku-buildpack-google-chrome.git

 

上記がすべて正常に完了していればアプリの個別URL(https://dashboard.heroku.com/apps/<アプリ名>/settings)のsettingのconfigVarsとBuildPacksの表示が下記のようになっています

 

 

ソースコード

 

<main.py>

from selenium import webdriver
import os

# herokuで実行できるようにheadlessにする
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--no-sandbox")
chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")

# driver起動
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)

# サイトにアクセス
driver.get('https://www.google.co.jp')
# HTMLを取得
print(driver.page_source)
# ブラウザ終了
driver.quit()

 

関連記事:【Python】Seleniumでのスクレイピングでよく使うサンプルコードまとめ

 

処理は簡単でseleniumを起動してhttps://www.google.co.jpにアクセスしてhtmlを取得してprintするだけです。注意点はoptionでブラウザを表示させない–headlessを絶対指定しないといけない点です。herokuはGUIがないので通所の設定でSeleniumを起動させると表示するブラウザ画面がないのでエラーになります。これが普通のPCで実行するのと異なる点かなと思います

 

あとPYファイルのほかにPYTHONのバージョンを指定するruntime.txtとインストールするライブラリを指定するrequirements.txtも作成してmain.pyと同じディレクトリに配置します

 

<requirements.txt>

selenium==4.6.0

 

<runtime.txt>

python-3.10.8

 

配置イメージ

 

 

 

この状態でherokuにcommit pushします

 

cd <cloneして作成したアプリ名のディレクトリ>

git add .
git commit -m "first commit"
git push heroku master

参考:Python製プログラムを「Heroku scheduler」を使って無料で定期実行する

 

プログラムの実行

 

デプロイしたら試しにコードをCLI経由で実行してみます。実行コマンドは以下になります。

 

<コード実行コマンド>

$ heroku run python main.py

 

<実行結果>

 

正常に実行されるとseleniumでアクセスしたgoogleのトップページのサイトHTMLが出力されます

 

定期実行する場合はスケジューラーにpython main.pyを設定してあげればよいです

 

参考:Python製プログラムを「Heroku scheduler」を使って無料で定期実行する

 

では~

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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