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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

1回答

857閲覧

クライアント側でスクレイピングしたデータをherokuに送る方法

b40ult

総合スコア1

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/12/25 20:00

前提・実現したいこと

現在、スクレイピングで取得したデータをDjangoで作成したアプリケーションに表示させる仕組みを作っています。
サーバーはHerokuです。
当初はHerokuでスクレイピングを動かす予定でしたが、メモリが不足し途中で止まってしまうので クライアント側のPCでスクレイピングを動かす方向にしました。
Herokuでスクレイピングしていたときは取得したjsonをそのままtemplateで表示させることが出来たのですが、クライアント側で取得するとなると一度Herokuにデータを送信する必要があると思います。
どのような手段がありますでしょうか?ヒントを頂きたいです。

※データをリアルタイム(1~3分おき)に取得したいので、毎度git Pushでアップロードするのは難しいです。

該当のソースコード

スクレイピングのコードはこのような感じです。

現状の理想としては、PCで下記を実行し、取得したjsonファイルを数分おきにherokuに送信し、表示出来たらいいなと考えております。

一部省略しています。

python

1options = Options() 2options.add_argument('--headless') 3browser = webdriver.Chrome(chrome_options=options,executable_path="C:\Program Files\chromedriver_win32\chromedriver") 4 5 6follow_id_list=['fps_shaka', 'spygea', 'stylishnoob4'] 7 twitch = "https://www.twitch.tv/" 8 9 keys=['title','name'] 10 title_list=[] 11 CHname_list=[] 12 detail=[] 13 14 for r in follow_id_list: 15 browser.get(twitch + r) 16 browser.implicitly_wait(3) 17 c = browser.find_elements_by_class_name('live-time') 18 if len(c)>0: 19 try: 20 titles = browser.find_element_by_xpath('//h2[@data-a-target="stream-title"]') 21 title = titles.text 22 print(title) 23 title_list.append(title) 24 except: 25 title_list.append("") 26 print("タイトルが取得できませんでした") 27 try: 28 CHnames = browser.find_element_by_xpath('//h1[@class="CoreText-sc-cpl358-0 ScTitleText-sc-1gsen4-0 fWkOCC bMnEsX InjectLayout-sc-588ddc-0 gCPoAo tw-title"]') 29 CHname = CHnames.text 30 print(CHname) 31 CHname_list.append(CHname) 32 except: 33 CHname_list.append("") 34 print("表示名が取得できませんでした") 35 36 37 videoID_list.append(r) 38 39 browser.implicitly_wait(3) 40 else: 41 print("twitchで"+ r +"は配信していません") 42 for count,title in enumerate(title_list): 43 tmp_dict= {keys[0]:title_list[count], 44 keys[1]:CHname_list[count], 45 } 46 detail.append(tmp_dict) 47 48 with open('twitch.json','w',encoding="utf-8")as f: 49 json.dump(detail,f,indent=4,ensure_ascii=False) 50 51

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

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

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

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

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

guest

回答1

0

Herokuで動作しているサーバ:
・jsonデータを受け取れるAPIを作り、受け取ったデータ保存するようにする。
・表示画面では、保存したデータを表示するようにする。

ローカル側:
・生成したjsonデータをHerokuのAPIに合せて送信する。

でいけるんではないかな。

それぞれ、APIを作ったり、リクエストを出したりするのは、いろいろ出てきますよ。

投稿2021/12/26 10:24

TakaiY

総合スコア12832

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問