用 Python 擷取網頁 API 的 JSON 數據
之前接受朋友請託,寫了簡易的 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 的 XPath 擷取 html 結構資料 - v2.0
留言
張貼留言
由於廣告留言太多,因此改採審核發佈,請耐心等候。
無法留言?請點我