如何用Python獲得上市上櫃股票清單?

接下來為期幾天,將為大家打下python更深刻的基礎,適合剛學python,但是對pandas不太熟的讀者,這次我們就來把所有的股票代號給爬下來,並整理一番喔!

Python真的很厲害~可以用少少的語法達到非常多的功能
我覺得python搭配excel是沒有必要的,直接使用python替代excel才是最佳的方式!

6 1

這禮拜終於比較悠閒一點,開始寫blog了,目前主要還是繼續培養大家的python實力為主,因為有一些同學說明課程有些地方跳的比較快,其實可以參考一些網路上免費的python課程來補齊,不過此blog也會隨時補充一些實用的功能,或是簡單的 python 常用的package和語法,幫助大家熟練 python。

今天要做的就是取得上市櫃股票代號與分類,首先,我們想要爬的網頁是:
http://isin.twse.com.tw/isin/C_public.jsp?strMode=2

其中strMode=2就是上市,而strMode=4就是上櫃,接下來我們就來將此網頁下載下來吧!

爬取網頁

import requests

res = requests.get("http://isin.twse.com.tw/isin/C_public.jsp?strMode=2")

其中,我們使用了常用的 package 叫做 requests,可以模擬網頁瀏覽器,其中 requests.get 就是模擬我們連到該網頁,下載網頁的原始碼~

1 1

將網頁轉成 DataFrame

我們用了上述的程式碼,就可以獲得該網頁的原始碼,瀏覽器就是用這些原始碼渲染成網頁讓您操作的,我們可以從網頁原始碼中萃取出表格,產生 DataFrame

import pandas as pd

df = pd.read_html(res.text)[0]
df

第一行:pd 就是我們萃取原始碼的package,全名叫做 pandas ,你可以想像 pandas 就是 python 界的 excel 軟體,可以操作各式各樣的表格,進行運算。

第三行:我們可以利用 pd.read_html 將我們剛剛爬取到的網頁原始碼 res.text 中的表格給萃取出來,而其中 [0] 是指說,萃取出來的可能有很多張表格,我們只需要第一張表格即可~

2 1

整理資料 1 整理column名稱

可以看到上圖,目前column名稱只是1、2、3、4,一些數字而已,但我們希望它們是有意義的文字,而我們又可以發現,其中第一行row,就是我們所需要的,所以,我們可以將第一行變成columns的名稱:

# 設定column名稱
df.columns = df.iloc[0]
# 刪除第一行
df = df.iloc[1:]
3 2

整理資料 2 刪除冗餘行列

接下來我們發現整理好column名稱後,還是有一些row很明顯是多餘的,我們必須要把它們刪除,刪除的方式,最簡單就是使用 dropna,並且設定當 row 或是 column 的 NaN 數量大於某個數字(例如3)時,我們就將該 column 或 row 移除:

# 先移除row,再移除column,超過三個NaN則移除
df = df.dropna(thresh=3, axis=0).dropna(thresh=3, axis=1)
4 1

設定index

我們可以看到index目前也是數字,我們希望它是股票代號,則可以使用

df = df.set_index('有價證券代號及名稱')

即可!

5

由今天的練習,我們學到了使用 requests 來模擬瀏覽器,用 pandas 解析出網頁中的 table,並且利用 pandas 中的功能,將 table 作整理!

博士班口試結束了,接下來我會盡力開始維持blog正常出貨!也希望能提供更多的選股、程式上的教學!

FinLab - 韓承佑

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