【python】スクレイピングしたデータをデータベース(DB)に保存する

スポンサーリンク

今回はpythonを使ってビットコインを始めとする仮想通貨の価格データを取得し、sqlite3を使ってデータベースに保存するという流れを行っていきたいと思います。

ビットコインの価格を取得する

ビットコイン・アルトコインの価格を取得する方法はいくつかありますが、今回はビットフライヤーのビットコインの価格をAPIを通じて取得し、データベースに保存していきたいと思います。

#ライブラリのインポート

import requests
import json
import time
import pybitflyer
import sqlite3


#ビットフライヤーのビットコインの価格を取得する

url=('https://api.bitflyer.com/v1/ticker')
r=requests.get(url)
r=json.loads(r.text)
date=r['timestamp']
price=r['ltp']
 

ビットフライヤーのAPIでtickをリクレストすると以下のようなjsonのレスポンスが返ってきます。

{‘best_ask’: 749597.0,
‘best_ask_size’: 0.63189306,
‘best_bid’: 749290.0,
‘best_bid_size’: 0.09,
‘ltp’: 749597.0,
‘product_code’: ‘BTC_JPY’,
‘tick_id’: 3715090,
‘timestamp’: ‘2018-10-02T06:01:18.703’,
‘total_ask_depth’: 1742.89523228,
‘total_bid_depth’: 2201.43568615,
‘volume’: 267260.85066754,
‘volume_by_product’: 5147.30354399}

timestampは時間、ltpは最終取引価格を表示しているのでそこを抽出します。詳しい話は↓の記事で解説しています。

データベースを作成する

#データベースの作成とパスを通す
dbpath = 'sample.sqlite' 
c = sqlite3.connect(dbpath) 
cur = c.cursor()

2行目のcはconectionのcです。人によってはconnectionとしている人もいます。cの方が後々コードの文字数が減ります。

次は接続したデータベースの中に新規テーブルを作ります。今回はcrypto_masterというテーブルを作ります。テーブルとdbファイルは別物で、sample.sqliteというデータベースファイルの中にcrypto_masterというデータテーブルを作るというイメージです。

# テーブルの作成 
sql="create table crypto_master(id integer primarykey auto_increment , name text)";
cur.execute(sql)

テーブルの中身は無難にIDとNameにします。IDは数字型で同じものがあったら困るのでintegerとprimarykeyを指定しておきます。データ型とプライマリーキーの話はsqliteではなくSQLの仕様の話です。

ここで取得するデータの種類ごとにIDで紐づけしていきます。今回はとりあえずビットコインの価格を取得するので、ID 1 Name Bitcoinみたいなデータをまず登録しておきます。

#テーブルにデータを追加する
sql="insert into crypto_master(id,name) values(1,'bitcoin')";
cur.execute(sql)

#SELECT文でデータが追加されたか確認する
sql="select * from crypto_master";
i=cur.execute(sql)
for i in cur:
   print(row[0], row[1])

結果

1|bitcoin

取得した価格データをデータベースに格納する

次はdate・priceという変数に格納した日次と価格データをsqlite3を通して、データベースに保存していきたいと思います。

#価格テーブルの作成
sqlite> create table price_data(id integer primarykey auto_increment , date text ,price integer);
cur.execute(sql)

#データを追加する
insert into price_data(date, id,price) VALUES ( '9-24','1','750000');
cur.execute(sql)
#データがちゃんと追加されたか確認する
sqlite> select * from price_data;
cur.execute(sql)

1|9-24|750000みたいなデータが返ってきていれば成功です。次はこの’1’,’9-24′,’750000’の部分を変数に置き換えます。

なので流れとしては、APIを通じて取得したデータを変数に格納し、それをデータベースに保存するという流れになります。

#tickデータを取得してデータベースに加える
sql="insert into price_data(date, id,price) VALUES ( ' +"'"+str(date)+"'"+(',')+"'"+str(id)+"'"+(',')+"'"+str(price)+"'"+')";
cur.execute(sql)
#データベースとの接続を終了する
 conn.commit()conn.close()

この一連の流れをまとめると以下のようなコードになります。

#ライブラリのインストール

import requests
import json
import time
import pybitflyer
import sqlite3

dbpath = 'sample.sqlite'
c = sqlite3.connect(dbpath)
cur = c.cursor()
id=1

 

for i in range(2):

url=('https://api.bitflyer.com/v1/ticker')
r=requests.get(url)
r=json.loads(r.text)
date=r['timestamp']
price=r['ltp']
sql = 'insert into price_data(date, id,price) VALUES ( ' +"'"+str(id)+"'"+(',')+"'"+str(date)+"'"+(',')+"'"+str(price)+"'"+')';
cur.execute(sql)
print(date,price,'OK')
time.sleep(10)

プログラミングを挫折せず最短で習得する方法


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上にあたってはもはや出来て当たり前のスキルとなりつつあります。こういう話はテレビや雑誌でも最近増えてきたので、知らない人はいないでしょう。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して侍エンジニアのwebサービスコースに申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解できました。


侍エンジニアでは様々なコースが用意されており、HTML・cssなどでWebサイトやWebアプリを作ってみたい人からPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズにこたえています。


IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習まで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけてみましょう。ちなみに今「侍エンジニア」の無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。







自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする