Python新手教學(Part 1):用爬蟲爬全球股價!

這個系列文章的第一篇,我們要來介紹如何簡單使用Python爬股價!而且全球股價都適用喔!今天就讓我們回到原點,從最簡單的python爬蟲開始教起,想要做股票數據分析,一定要先得到股票資料,所以我們就從股票資料如何獲取開始吧!

從頭開始學 python

這篇文章中
我們會帶著初學者開始再從頭瞭解
如何用python分析財經資料,並從中獲利!

你是程式新手嗎?
不用擔心,只要跟著這一系列的教學,
保證你一定學的會!
這一系列教學將會是hahow課程中的化簡,
但是可以幫助新手無痛的開始使用python!

請點選此此課程範例,免費線上運行程式碼

使用 Google Colab 來寫 Python

Google ,佛心來著的公司,最近推出了免費雲端寫程式的平台: Google Colab
不用安裝任何軟體,可以線上免費使用 Python 實在是太方便了!只要打開 Colab 並且新增一個 notebook ,並將下方的 Code 複製貼上跑一跑囉!當然你也可以打開已經寫好的課程範例,免費線上運行程式碼!讓你快速體驗 Colab 的實力!廢話不多說,進入今天的正題吧!

用 Python 製作爬蟲爬取歷史股價

首先要先獲取股價資料,我們會用常用的 Python 函式庫:requests
它可以將網路上的資料給下載下來,給程式使用

import requests

這邊的import,就像是我們在電腦裡面打開某個軟體來使用,一樣的意思。我們打開 requests,方便我們之後能夠用它來下載「台積電」的資料:

https://query1.finance.yahoo.com/v8/finance/chart/2330.TW?period1=0&period2=1549258857&interval=1d&events=history&=hP2rOschxO0
首先,上面這一串,明顯是一個網址,點進去後,會發現非常多文字,這個就是我們用瀏覽器跟 yahoo finance 的 server 索取了台積電的股價。上面這串網址,總共有幾個地方可以調整,方便我們爬取不同的資訊:

  • 2330.TW 是台積電在 yahoo finance 上的 symbol,你也可以任意換成其他的,例如蘋果(AAPL),特斯拉(TSLA),微軟(MSFT)等等
  • period1 是指起始時間,其單位為從1970年開始過了n秒
  • period2 是指結束時間,其單位為從1970年開始過了n秒

以上的網址,就可以將台積電在這兩個區間股價資訊給爬下來了!我們可以用 Python 把網址裡內的內容給爬下來。

與遠端 server 的溝通:get 和 post 方法

斯斯有兩種,電腦常用的訊息傳遞方式也有兩種,叫做 get 跟 post。你可以想像一種溝通是寫信、一種是打電話、一種是用line,無論哪一種,只要能夠溝通正確就可以了!我們可以用 requests.get 或是 requests.post 來跟 yahoo 的 server 索取資料,至於什麼時候用 get,什麼時候用 post,就是看 yahoo finance 的 server 適用於哪一種來決定的。

# 網址
site = "https://query1.finance.yahoo.com/v8/finance/chart/2330.TW?
period1=0&period2=1549258857&interval=1d&events=history&=hP2rOschxO0"

# 利用 requests 來跟遠端 server 索取資料
response = requests.get(site)

上面的程式碼,我們會產生一個 response 物件,是 yahoo server 傳過來的,裡面有台積電的歷史股價資訊,要怎麼把股價資訊打印出來呢?我們可以使用

print(response.text)

來察看所有的文字檔

但這些文字檔非常不好閱讀,所以我們可以整理一下

將資料整裡成 DataFrame

會發現此文字檔非常大…,這種格式叫做 json,
我們必需要進行一些處理,將文字檔轉換成 dataframe ,才能閱讀這些資料

import json
import numpy as np
import pandas as pd

data = json.loads(response.text)
df = pd.DataFrame(data['chart']['result'][0]['indicators']['quote'][0], index=pd.to_datetime(np.array(data['chart']['result'][0]['timestamp'])*1000*1000*1000))

我們可以印出前面五行:

df.head()


這樣我們就簡單地用python爬到股價了!

繪圖

我們可以將收盤價的歷史紀錄給畫出來:

df.close.plot()

全球股價

你可以將任何一檔股價,包含美股港股台股陸股,用同樣的方式爬下來,只要在yahoo finance可以找到,就一定可以下載的下來喔!例如微軟(MSFT)、蘋果(AAPL)、特斯拉(TSLA),都可以用類似的方法來下載!

行有餘力,請點選下一單元,將全球大盤指數都下載下來

這一系列是我們影音課程的化簡版,
假如對此教程有興趣,歡迎參考我們的影音課程,裡面有更詳細並完整的教學,包含資料庫建置、數據分析、回測等等。當然我們也有免費的文章,以爬蟲來說,就有非常多篇,你可以先逛一逛:

除了爬股票分析的資料,我們還有爬一些奇特的數據,有需要也可以來看看:

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!