當前文章

【Python】 資料爬蟲及線圖繪製 - 線性趨勢圖

導讀


先前寫了一篇關於爬蟲入門的教學:【Python】 資料爬蟲入門 - 貨幣價值實時抓取,實際上資料爬蟲的應用並不會只抓1筆資料,而是會持續捕捉數千、數萬筆資料,可以水平跨類別的抓取資料、又或是持續蒐集不同時間點的資料。這次,我們就來將「持續蒐集得來的資料繪製為線圖」。


目標



階段性目標


  • 選用 for loop 或 while loop 進行目標資料重覆抓取
  • 使用 matplotlib 套件中的線圖繪製函式

  • 實作步驟


    輸入以下程式碼資料抓取前置作業:
    import requests
    import matplotlib.pyplot as plt 
    import time 
    from datetime import datetime
    
  • 引用 requests 套件進行 url 資料載入
  • 引用 matplotlib 進行線圖繪製
  • 為使用 sleep() 函數引用 time 套件
  • 為取得當前時間引用 datetime 套件



  • 以下程式碼則為本資料抓取的實作環節,測試成功後即可改寫為類別或副程式:
    timestamp = [] # 設定記錄時間戳記的list
    price = [] # 設定記錄價格的list
    print("於 ", datetime.now().strftime('%Y-%m-%d %H:%M'), " 進行比特幣價格追蹤:")
    
    for i in range(1, 6):    # 先用 for 迴圈測試 5 次運行的情況
    	 # 擷取目標 url 的資料
        response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json") 
        data = response.json() # 將資料以 json 格式進行儲存
        bc = data["bpi"]["USD"]["rate_float"]
        timestamp.append(datetime.now().strftime('%H:%M'))
        price.append(bc)
        print("已記錄第", i , "筆價格,下一筆將在 1 分鐘後進行記錄")
        if (i < 5): time.sleep(60) # 間隔60秒,若已至最後一次則跳過此步驟
    
    plt.plot(timestamp, price)
    plt.show
    
  • 此處建立2個list,用來儲存線圖的x軸「時間」及y軸「價格」
  • For 迴圈內的程式碼與上篇雷同,差異之處為加入了時間格式、程式休眠time.sleep()
  • plt.plot(x, y):以 x 中存放的資料作為 x軸,以 y 中存放的資料作為 y軸



  • 測試成功後,就可以將程式改寫為類別或副程式,以下將其改寫為副程式:
    # 將爬蟲程式碼轉換為副程式,方便未來管理、修改
    # 此副程式須輸入欲記錄的資料「筆數」(records)
    def bitcoin_crawler(records):
        timestamp = []
        price = []
        print("於 ", datetime.now().strftime('%Y-%m-%d %H:%M'), " 進行比特幣價格追蹤:")
        for i in range(records):
            response = requests.get("https://api.coindesk.com/v1/bpi/currentprice.json")
            data = response.json()
            bc = data["bpi"]["USD"]["rate_float"]
            timestamp.append(datetime.now().strftime('%H:%M'))        
            price.append(bc)
            print("已記錄第", i+1 , "筆價格,下一筆將在60秒後記錄")
            time.sleep(60)
        plt.plot(timestamp, price)
        plt.show
    

    呼叫該副程式時,直接輸入定義好的副程式名即可,以下則讓使用者自行輸入要記錄的資料數目:
    i = int(input("請問您現在要開始記錄的比特幣價格筆數,請輸入正整數:"))
    bitcoin_crawler(i)
    

    沒有留言:

    張貼留言

    Suz 數位式 僅供學術交流使用,版面設計原始提供者: Templateism 維護修改者: Suz | Google Blogger Copyright © 2014-2021

    主題圖片來源:richcano. 技術提供:Blogger.