前提・実現したいこと
現在、スクレイピングで取得したデータを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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。