こんにちは。
現在、FlaskとSeleniumを利用して、
①抽出条件を入力してスタートボタンを押す
②抽出結果画面に移動する
③背後でSeleniumが動いており抽出条件に基づいてスクレイピング作業を行う
④順次、スクレイピングで取得した値をView側で受け取り画面更新していく
⑤Seleniumが処理中の間は処理中である旨の表示を出す
⑥Seleniumの処理が完了したら画面上に「処理完了」と表示する。
ということができるWebアプリケーションを開発しています。
自力で開発を進めた結果、
①抽出条件を入力してスタートボタンを押す
②背後でSeleniumの抽出作業を行う
③抽出データを変数に格納してrender_templateで抽出結果画面に異動
というところまでは完成しました。
だいたい、こんなイメージで書いています。(処理内容は大きく省略して書いています)
python
1#app.py 2 3# スクレイピングをするための自作関数をimport 4from driver import scraping 5from flask import Flask, render_template, request 6 7app = Flask(__name__) 8 9# トップページにアクセス 10@app.route('/') 11def index(): 12 return render_template('index.html') 13 14# スタートボタンを押したあとの処理 15@app.route('start', methods=['POST'] 16def start(): 17 keyword = request.form['keyword'] 18 result = scraping(keyword) 19 return render_template('result.html', result=result)
html
1# index.html 2<form action="/start" method='POST'> 3 <input type='text' name='keyword'> 4 <input type='button' value='スタート'> 5</form>
html
1#result.html 2{% if result %} 3 {% for data in result %} 4 <p>{{ data }}</p> 5 {% endfor %} 6{% endif %}
しかし、
背後でSeleniumを動かしつつ画面を自動更新する
という機能の実装方法がわからず困っています。
画面を自動更新する技術についてはAjaxの仕組みを導入したら大丈夫とは思っていますので、あとはそこに定期的にデータを渡していく方法、背後でSeleniumを動かし続ける方法を知るだけだと予想しています。
下記のリンクを見てWebSocketの技術を学べば実現できるかも、と思ったのですが、Selenium処理終了後にWebSocekt処理を止める方法が調べたりいろいろ試したりしてもあんまり良くわかりませんでした。
Flask+websoket+Epochを使ってリアルタイムチャート
そもそも、WebSocketの技術を利用することが今回の問題を解決する方法として正しいのかも自身が持てません。
どのような技術やツールを利用することで上記の機能を実装することができるのかを教えていただけないでしょうか?(さらに具体的なコードも書いていただけると幸いです)
ちなみに、最終的にはこれで作成したツールをHerokuの無料サーバーにデプロイして利用しようと考えています
よろしくお願いいたします
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。