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

此方法可以爬全球股市!今天讓我們回到原點,從最簡單的程式開始教起,想要做股票數據分析,一定要先得到股票資料,所以我們就從股票資料如何獲取開始吧!

從頭開始學python

這篇文章將會是一系列的2019年新文章,我們會從初學者開始再從頭帶你瞭解python如何分析財經資料,並從中獲利!

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

以往我寫的分析都太複雜了,比較曲高和寡,常常嚇到大家,真的不好意思,就像衝太快,發現後面沒跟上,我們的初衷應該是讓更多人能接觸python,而不是將將大家甩在後頭XDDD。

設定python環境

假如你還沒安裝python,可以先簡單的設定一下環境,我建議使用Anaconda,它一次就會幫你灌好不只是python,還有相關的套件,讓你可以無痛學習!

相關教學:python環境安裝
按照上方文章教學,只要照著步驟,直到可以印出hello world為止,就趕快回來這邊喔!

有些人覺得Anaconda太笨重,且安裝太久,但我個人認為,對於新手來說極度的好用,所以還是非常建議你直接安裝,假如學習後發現想要更深入,再考慮其他的解決方案。

接下來,我們就可以開始用jupyter寫程式了!

爬取歷史股價

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

1
import requests

這邊的import就有點像是,我們打開某個套件的感覺,之後才能使用它。

我們想要爬取的網址,以台積電「2330」為例:
https://query1.finance.yahoo.com/v7/finance/download/2330.TW?period1=0&period2=1549258857&interval=1d&events=history&crumb=hP2rOschxO0
網址中的period1是指起始時間,而period2是指結束時間,其單位為1970的過了n秒,以上的網址,就可以將台積電在這兩個區間股價資訊給爬下來了!

但很奇怪的是,你直接用瀏覽器打開,沒有辦法用!
因為瀏覽器通常是用「get」的方法,
而此網址必須要用post方法,才能正確的得到資料。

什麼是get和post呢?

兩種都是電腦之間溝通的方式,你可以想像一種溝通是寫信、一種是打電話、一種是用line,無論哪一種,只要能夠溝通正確,就可以了!

如何使用post方法得到資料呢?可以用以下方式:

1
2
site = "https://query1.finance.yahoo.com/v7/finance/download/2330.TW?period1=0&period2=1549258857&interval=1d&events=history&crumb=hP2rOschxO0"
response = requests.post(site)

這時,我們就會有一個response,裡面存放著台積電的歷史股價資訊,要怎麼把股價資訊打印出來呢?我們可以使用

1
print(response.text)

來察看所有的文字檔

將資料存檔

會發現此文字檔非常大…,所以我們希望能夠先將它存起來
下方的程式,就是將response.text的文字存入file.csv這個檔案之中,我們會先用with來確保open('file.csv', 'w')有被正確的執行:

1
2
with open('file.csv', 'w') as f:
f.writelines(response.text)

為什麼檔案file.csv的格式要叫做csv呢?
是因為csv檔是一種可以用excel或記事本打開的格式。
例如我們以記事本打開如下:

將資料讀進來

接下來我們重新把這個歷史資料讀進來,可以使用pandas這個套件,
pandas有點像是python版的excel,可以快速的對行列做運算,我們利用pandas的read_csv將csv檔給讀進來;並用df.head()印出前面五行:

1
2
3
import pandas as pd
df = pd.read_csv('file.csv')
df.head()

我們會發現,此dataframe的column名稱很好,有開高低收,但是index卻是0,1,2,3…,而不是日期,我們必須將index換成日期,這樣之後在查找時,會比較方便:

1
2
3
4
# brfore:
# df = pd.read_csv('file.csv')
# after:
df = pd.read_csv('file.csv', index_col='Date', parse_dates=['Date'])

其中index_col就是將Date這條column當作是index,而parse_dates可以將Date轉換成程式瞭解的日期格式,而非單純的字串。

上圖跟之前的就不一樣了喔!記得去比較一下~

這樣我們就簡單的得到了股價了!

繪圖

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

1
df.Close.plot()

全球股價

你可以將任何一檔股價,包含美股港股台股陸股,用同樣的方式爬下來,只要在yahoo finance可以找到,就一定可以下載的下來喔!

行有餘力,請點選下一單元,我們就來抓全球股市指數吧!

這一系列是我們影音課程的化簡版,
假如對此教程有興趣,歡迎點選下方影音課程,會豐富到炸裂喔~

文章不錯,影音課程更讚:


或我們按個 鼓勵一下吧!