今回は、いなごFlyerをPythonを使って(ほぼ)リアルタイムで数値の上下を観測できるようにスクレイピングしてみます。今回はJavascriptで動的にHTMLが生成されているサイトのスクレイピングなのでseleniumを使います。私はヘッダーレスブラウザのPhantomJSをwebkitとして使用しました。
こちらの記事を参考にしました。
環境
・MacBook Air Early 2015 Sierra 10.12.6
・Python 3.6.2 pip3
・iTerm2(コマンドプロント)
・CotEditor(エディター)
モジュールなど
・Selenium(pip3 install selenium)
・PhantomJS(http://phantomjs.org/)
・time(標準モジュール)
コード
初めてのseleniumを使うスクレイピングなので簡潔にかきました。他の方の記事を見るとpathやら何やらを代入していたのですが特に何もしなくてもできたので記述しませんでした。
from selenium import webdriver from time import sleep #関数VOLでボリュームをスクレイプ def VOL(): for buyvol in driver.find_elements_by_id("buyVolumePerMeasurementTime"): ask = buyvol.text for sellvol in driver.find_elements_by_id("sellVolumePerMeasurementTime"): bid = sellvol.text return ask,bid #seleniumの設定 #htmlを取得 ブラウザでこのウェブページに入る感覚(?) #一回getしちゃえばjsを拾えてるみたいなのでwhileの外に driver = webdriver.PhantomJS() driver.get("https://inagoflyer.appspot.com/btcmac") #無限ループさせてボリュームを更新させる while True: print('-----------------') vol = VOL() print('buybol: ' + vol[0] + 'sellvol: ' + vol[1])
おまけ
素っ気なかったのでbFのapiを叩いて価格変動も一緒に観察できるようにしました。
from selenium import webdriver from time import sleep import requests def BTC(): URL = 'https://lightning.bitflyer.jp/v1/getticker' ticker = requests.get(URL).json() price = "{:,d}".format(int(ticker['best_ask'])),"{:,d}".format(int(ticker['best_bid'])) return price def VOL(): for buyvol in driver.find_elements_by_id("buyVolumePerMeasurementTime"): ask = buyvol.text for sellvol in driver.find_elements_by_id("sellVolumePerMeasurementTime"): bid = sellvol.text return ask,bid driver = webdriver.PhantomJS() driver.get("https://inagoflyer.appspot.com/btcmac") while True: btc = BTC() vol = VOL() print('-----------------------------') text = 'ask: ' + btc[0] + ' / vol: ' +vol[0] + '\n' + 'bid: ' + btc[1] + ' / vol: ' + vol[1] print(text) sleep(1)
実行
ボリュームと価格を同時にみることができるようになりました。製作中の自動取引botに組み込んでみたいと思います。