2020年11月15日 星期日

[python抓爬仔]~~將抓取的資料存入sqlite資料庫

 前面介紹過如何使用twder模組抓取台銀即時匯率資料的操作

但光是抓取資料來呈現,對於網路資料的擷取實在是可惜了~~若是能將資料儲存下來,作為後續資料分析、追蹤之用,那才是資料抓取之重點啊!

那麼~~抓取回來的資料要如何儲存?存在哪裡呢?

這個問題~~見仁見智啦~~你要簡單儲存在一個文字檔(*.txt)可以嗎?可以啊.....;儲存在MySQL資料庫咧~~很好啊....,端看你準備怎麼用、如何用、好不好用這些資料而定!你自己用的開心、滿足自己所需最重要!

這次,為了方便應用~使用了python安裝時即內建的sqlite資料庫(我自己是習慣使用MySQL啦),作為資料擷取儲存的工具!著眼點就是:內建~~無須在涉及資料庫的安裝、設定...等等!

OK~~這次目標是:

一、擷取台銀指定幣別(日幣)即時匯率資料(前面介紹過請自行參考)

二、使用pandas模組將擷取的資料格式化

三、使用sqlite3配合pandas進行sqlite指定的資料庫-資料表的讀寫操作

好囉~~基本上也是直接看程式碼即可~~~上吧...程式馬(呵!~無聊)

# 先確認已安裝所需之模組
import twder
import sqlite3
import pandas as pd

n_der = twder.now('JPY')   # 擷取目前指定幣別(日幣)報價
tc = ["資料時間",  "現金買入",  "現金賣出",  "即期買入", "即期賣出"]    # 設定一組資料表欄位之列表
t_data = []     # 設定一組空列表(list)做為儲放資料集之用
t_data.append(n_der)    # 將查詢結果儲存至資料庫之資料列表(list)

t_df = pd.DataFrame(t_data, columns=tc)    # 組合為pandas 之 DataFrame

with sqlite3.connect('twder_demo.sqlite') as db:        #連結sqlite之twder_demo.sqlite資料庫
    t_df.to_sql('twder_demo', con=db, if_exists='append')     # 使用pandas to_sql將資料集(t_df)寫入資料表:twder_demo
    print("=======資料寫入完成=======")
    # 使用pandas read_sql_query讀取資料表內容並格式化
    read_df = pd.read_sql_query('select * from twder_demo', con=db)    

print(read_df)
# =======使用iloc索引選擇輸出內容
print(read_df.iloc[:, 1:])

執行結果如下:

簡單補充說明:

1.本次使用pandas可將擷取資料進行格式化及後續操作,是個很強勁的模組!

2.第13~17行:sqlite資料的讀寫,配合pandas可以直接對資料庫(twder_demo.sqlite)、資料表(twder_demo)進行操作,無須先行設定

2-1.程式第一次執行完成後,即可在程式檔案目錄下看到建立的資料庫檔案:twder_demo.sqlite

3.第14行:其中 「if_exists='append'」表示若是 資料表:twder_demo不存在就建立該資料表,若已存在則進行資料新增。

4.若想單獨對sqlite資料庫進行管理及設定、維護,可以安裝DB Browser for SQLite管理軟體進行操作。(後續再找時間介紹了)

5.第21行~~pandas讀取資料表內容後,可應用pandas  .iloc進行「行、列索引」設定格式化輸出內容。(這部分操作與列表(list)操作設定方式相當類似,請自行體會了~~一樣後續有機會在介紹囉!)

沒有留言:

張貼留言