HerokuでFlaskが上手く動作しない

実現したいこと

HerokuでFlaskを使ったスクレイピングサイトを公開したいのですが、@app.route('/') から @app.route('/scraping', methods=["GET","POST"]) にページが遷移しません。エラーが出ていますが、ローカルでは作動しています。

追記:解答から、HerokuのBuildpacksにバイナリを追加してページ遷移できるようになりましたが、スクレイピングができません。
tracebackでsession deleted because of page crashととエラーの内容が出てきました。

前提

Procfile

1web: gunicorn app:app --log-file=- 2web: gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 app:app 3web: gunicorn app:app --timeout 300

amazon.py

1from selenium import webdriver 2import time 3from selenium.webdriver.chrome.options import Options 4import re 5import chromedriver_binary 6 7options=Options() 8options.add_argument('--headless') 9options.add_argument('--disable-gpu') 10options.add_argument('--disable-extensions') 11options.add_argument('--proxy-server="direct://"') 12options.add_argument('--proxy-bypass-list=*') 13options.add_argument('--blink-settings=imagesEnabled=false') 14options.add_argument('--lang=ja') 15options.add_argument('--no-sandbox') 16options.add_argument('--disable-dev-shm-usage') 17options.add_argument("--log-level=3") 18options.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') 19options.add_experimental_option("excludeSwitches", ["enable-automation"]) 20options.add_experimental_option('useAutomationExtension', False) 21options.page_load_strategy = 'eager' 22driver = webdriver.Chrome(options=options) 23 24def amazon(word): 25 try: 26 print("Amazon_スクレイピング開始") 27 driver.get("https://www.amazon.co.jp/") 28 29     省略 30 31 list_amazon=["【Amazon】",product_name_amazon.text,"¥"+price_amazon.text,shipping_fee_amazon.contents[1].text,point_amazon[0],url_amazon] 32 33 print("Amazon_スクレイピング完了") 34 35 except: 36 print("Amazon_スクレイピング失敗") 37 list_amazon=["【Amazon】","-","-","-","-","-"] 38 39 return list_amazon

app.py

1from flask import Flask, render_template,request 2import os 3 4app = Flask(__name__) 5 6 7@app.route('/') 8def index(): 9 return render_template('index.html') 10 11 12@app.route('/scraping', methods=["GET","POST"]) 13def do_scraping(): 14 import amazon 15 word=request.form["search_word"] 16 17 list_amazon = amazon.amazon(word) 18 19 return render_template('result.html',word=word,list_amazon=list_amazon) 20 21if __name__ == "__main__": 22 app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)

発生している問題・エラーメッセージ

ターミナルでheroku logs --tail --app test2ee を入力するとこのようなlogになっています。(https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-04/64b9aae4-f2a1-4801-9389-ef441c194454.jpeg)

追記:
解答から修正し、再びlogを見ると以下のようなエラーが出ました。
(https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-04/30ad711f-32ad-4fa0-8819-86e3e75a0a94.jpeg)
(https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-04/352f3528-96f5-45be-bd34-fe53f056c3ed.jpeg)

amazon.pyにコードを追加し、tracebackでsession deleted because of page crashととエラーの内容が出てきました。
(https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-04/ddb9ce54-de39-4552-84cc-797f0c54d3ae.jpeg)

試したこと

FlaskはWebUIを使い、スクレイピングの処理(amazon.py)はWebSocketを使えばよいと考えましたが、よくわかりませんでした。おそらくターミナルのlogにエラー原因が書いてあるのですが、読み取ることができないので教えていただきたいです。

コメントを投稿

0 コメント