HerokuでFlaskが上手く動作しない
解決したいこと
HerokuでFlaskを使ったスクレイピングサイトを公開したいのですが、@app.route('/') から @app.route('/scraping', methods=["GET","POST"]) にページが遷移しません。エラーが出ていますが、ローカルでは作動しています。
追記: 解答から、HerokuのBuildpacksにバイナリを追加してページ遷移できるようになりましたが、スクレイピングができません。
発生している問題・エラー
ターミナルでheroku logs --tail --app test2ee を入力するとこのようなlogになっています。
追記:解答から修正し、再びlogを見ると以下のようなエラーが出ました。
Procfile
web: gunicorn app:app --log-file=-
web: gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 app:app
web: gunicorn app:app --timeout 300
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
import re
import chromedriver_binary
options=Options()
options.add_argument('--headless')
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('--blink-settings=imagesEnabled=false')
options.add_argument('--lang=ja')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--log-level=3")
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)
def amazon(word):
try:
print("Amazon_スクレイピング開始")
driver.get("https://www.amazon.co.jp/")
省略
list_amazon=["【Amazon】",product_name_amazon.text,"¥"+price_amazon.text,shipping_fee_amazon.contents[1].text,point_amazon[0],url_amazon]
print("Amazon_スクレイピング完了")
except:
print("Amazon_スクレイピング失敗")
list_amazon=["【Amazon】","-","-","-","-","-"]
return list_amazon
from flask import Flask, render_template,request
import os
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/scraping', methods=["GET","POST"])
def do_scraping():
import amazon
word=request.form["search_word"]
list_amazon = amazon.amazon(word)
return render_template('result.html',word=word,list_amazon=list_amazon)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)
自分で試したこと
FlaskはWebUIを使い、スクレイピングの処理(amazon.py)はWebSocketを使えばよいと考えましたが、よくわかりませんでした。おそらくターミナルのlogにエラー原因が書いてあるのですが、読み取ることができないので教えていただきたいです。