質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

306閲覧

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

S.H16

総合スコア5

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/12/04 01:07

編集2023/12/05 10:02

実現したいこと

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にエラー原因が書いてあるのですが、読み取ることができないので教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ログを見ると、一番上に
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
と表示され、エラーが発生しているのが分かります。
メッセージから、Chromeのバイナリファイルがないのが分かります。

また、2023-12-03T23:56:27.858471+00:00Stopping all processes with SIGTERMとあるので、全てのプロセスが止まっているのが分かります。

Herokuは無料版がなくなってしまったので試すことはできませんが、無料版の名残で検索するとそれなりに記事が引っかかります。

例えば、以下です。
Heroku + Selenium + ChromeでWEBプロセスを自動化する

上記サイトによると、ChromeとDriverの設定というのが必要そうです。

現在もあるか不明ですが、似たような事が必要と考えられますので、確認してみてはいかがでしょうか?

投稿2023/12/04 01:33

FiroProchainezo

総合スコア2385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.H16

2023/12/04 02:19

回答ありがとうございます。HerokuのBuildpacksに追加してselenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binaryはなくなりましたが、Stopping all processes with SIGTERMが治らず、おそらくこれが原因でスクレイピングが失敗してしまいます。どのようにすればよろしいでしょうか? Herokuは学生プランで2年間無料で使える状態です。 @app.route('/scraping', methods=["GET","POST"]) でページ遷移はできるようになりました。
S.H16

2023/12/04 04:03

amazon.pyにコードを追加し、tracebackでsession deleted because of page crashとエラーの内容が出てきました。(追記画像の3枚目)どのようにすればよいかご存じでしょうか。
FiroProchainezo

2023/12/05 01:02

あ、スクレイピング先はAmazonでしたか…。 個人的に、Amazonは規約でスクレイピングを禁止しているように見えるため、お手伝いすることはできません。 申し訳ございませんが、ご了承ください。 回答とは関係ないですが、ログは画像ではなくテキストでご提供ください。 すさまじく読みにくいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問