用 Python 擷取網頁 API 的 JSON 數據

用 api 與 python 抓取幣安 binance 加密貨幣市場價格

 

之前接受朋友請託,寫了簡易的 Python 爬蟲來幫他監控加密貨幣資產。但後來發現這隻爬蟲有個小缺點,即無法紀錄當下的加密貨幣市場價。即便有抓取「錢包總資產美金價」,但沒有市場價格的話,有時候很難評估獲利狀態。

 

因此本文延續之前的加密貨幣錢包地址資產 Python 爬蟲監視器教學,流浪貓將教各位如何使用幣安的網頁 API 抓取乙太幣的美金價。習總倒退加速師

 

 

安裝模組

由於幣安的 API 是 json 資料格式,因此我們需要用上 json 和 requests 這兩隻模組。前者可以將 json 整理成純文字檔,後者則是 Python 數據分析與資料蒐集時常用的套件,主要功能是向網頁發送 HTTP 請求並接收網頁資料。

 

pip install requests
pip install json

 

 

程式碼詳解

引入模組後,先用 print 的 file=open 建立一個 csv 檔案,開頭插入當下的時間。接著以 response 發送 HTTP 請求,將回傳的 json 資料以 response.text 的方式整理成純文字,此時獲得的資料格式如下

 

{"symbol":"ETHUSDT","price":"1234.29000000"}

 

由於我們的目標是 price,因此用 [ ' ' ] 來抓即可。

 


完整程式碼

import requests
import time

print("\n" + time.strftime('%Y-%m-%d, %H:%M:%S'), file=open('eth-usd.csv', 'a'), end=', ')

response = requests.get("https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT")
time.sleep(3)

resp = response.json()
print(resp['price'], file=open('eth-usd.csv', 'a'), end=', ')

 

當然,你也可以引入 json 模組,用 json.loads 的方式印出 price 資料,兩者都能達到相同的效果。

import json  
clean_json = json.loads(response.text)
print(clean_json['price'])

 

 

將 JSON 檔案內特定屬性的數值輸出成 CSV

網路 API 資料可以用 requests 來抓特定資料,那硬碟中的 json 資料該如何整理呢?其實這個問題可以用 json 模組來解決。

 

範例檔案: aro-data.json


    {
        "Name": "Tiaan",
        "number": "56",
        "Address": "None",
        "Description": "what?"
    },
    {
        "Name": "Muki",
        "number": "47",
        "Address": "None",
        "Description": "sure"
    }

 

 

Python 程式碼

將目標檔案以 with ... as 的方式打開後,用 json.load 的方式載入資料,並用 for ... in 迴圈將內部的特定字串擷取出來。

import json  

with open('aro-data.json') as json_file:  
    my_json = json.load(json_file)  
    for data in my_json:  
        print(data["Name"])

 

輸出結果

Tiaan
Muki

 

 

結語

有沒有覺得人生變得更輕鬆自在了呢?d(´∀`)b

 

 

延伸閱讀

加密貨幣冷錢包監視器 - Python 爬蟲 - v1.0

加密貨幣錢包地址資產監視器 - 用 Python 的 XPath 擷取 html 結構資料 - v2.0

我的 python 筆記與練習範例

更多 Python

 

 

 

留言

這個網誌中的熱門文章

寶鐘瑪琳中之人前世照片、年齡分析