用 Python 把加密貨幣資產數據轉換成 Json 檔
逗點分隔值 (Comma-Separated Values, CSV),是相當通用、簡單的資料格式,也是流浪貓研究 Python 爬蟲時用來存檔的主要方法。但透過加密貨幣區塊鏈瀏覽器所爬到的資料表格,其幣種序列往往是不固定的。
假設錢包地址內有 OSMO 與各種 IBC 跨鏈幣共五種加密貨幣,它的欄位會依照「幣種、描述、數量、總價與市場價」的規律排列,因此我們可以用 coin[x+n] 的方式依序 print 出資料。
但如果突然多了其他幣種,新的幣不一定會插入到最後一項,反而可能會變成第二或第三順位,這種插隊的狀況會造成 CSV 資料錯位。
當然,我們可以用搜尋功能找出包含特定「字串」的變數,並依序印出資料。但這種方法有點太手工,每新增幣種就得修改程式碼。
目前流浪貓選擇的解決方法,是採用 JSON 來儲存資料。雖然它產出的檔案稍微大,且不一定能轉成表格 CSV,但優點就是可以存放更為複雜的資料結構,例如巢狀資料。翠維尼
而且只要將網頁資料結構的規律解出來,就能直接依其模式儲存資料,不用擔心幣種插隊造成順序錯亂了。
ins_json = {time.strftime('%Y-%m-%d %H:%M:%S'): {'Name': res[x], 'Amount': res[x+2], 'Value': res[x+3], 'Price': res[x+4]}}
完整程式碼
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import re
import time
import json
from os import path
s = Service("/home/chromedriver")
driver = webdriver.Chrome(service=s)
cosmos_coin = ['https://www.mintscan.io/'] # url
for i in cosmos_coin:
driver.get(i)
time.sleep(5)
Token_n = '/html/body/div/main/section/div/div[2]/section[2]/div/div[2]/div[2]'
try:
Token_n_1 = driver.find_element(By.XPATH, Token_n).text
Token_com = re.sub(r'[,|$]', '', Token_n_1)
Token_n_cl = re.sub(r'\n', ', ', Token_com)
Token_n_2 = re.sub(r'\s', '', Token_n_cl)
except:
Token_n_2 = '0'
res = Token_n_2.split(",")
pri = r'[^/]+(?=/$|$)'
f_name = re.findall(pri, i)[0]
s = ', '
filename = f'{f_name}.json'
if path.isfile(filename) is False:
print('[]', file=open(f'{f_name}.json', "a"), end='\n')
print('No json! Create one!')
for x in range(0, len(res)-1, 5):
ins_json = {time.strftime('%Y-%m-%d %H:%M:%S'): {'Name': res[x], 'Amount': res[x+2], 'Value': res[x+3], 'Price': res[x+4]}}
with open(filename, "r+") as file:
data = json.load(file)
data.append(ins_json)
file.seek(0)
json.dump(data, file)
延伸閱讀
加密貨幣錢包地址資產監視器 - 用 Python 的 XPath 擷取 html 結構資料 - v2.0
讓 Chart js 的 html 讀取電腦內 json資料
留言
張貼留言
由於廣告留言太多,因此改採審核發佈,請耐心等候。
無法留言?請點我