接下來為期幾天,將為大家打下python更深刻的基礎,適合剛學python,但是對pandas不太熟的讀者,這次我們就來把所有的股票代號給爬下來,並整理一番喔!
Python真的很厲害~可以用少少的語法達到非常多的功能
我覺得python搭配excel是沒有必要的,直接使用python替代excel才是最佳的方式!
這禮拜終於比較悠閒一點,開始寫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
就是模擬我們連到該網頁,下載網頁的原始碼~
將網頁轉成 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]
是指說,萃取出來的可能有很多張表格,我們只需要第一張表格即可~
整理資料 1 整理column名稱
可以看到上圖,目前column名稱只是1、2、3、4,一些數字而已,但我們希望它們是有意義的文字,而我們又可以發現,其中第一行row,就是我們所需要的,所以,我們可以將第一行變成columns的名稱:
# 設定column名稱
df.columns = df.iloc[0]
# 刪除第一行
df = df.iloc[1:]
整理資料 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)
設定index
我們可以看到index目前也是數字,我們希望它是股票代號,則可以使用
df = df.set_index('有價證券代號及名稱')
由今天的練習,我們學到了使用 requests
來模擬瀏覽器,用 pandas
解析出網頁中的 table,並且利用 pandas
中的功能,將 table 作整理!
博士班口試結束了,接下來我會盡力開始維持blog正常出貨!也希望能提供更多的選股、程式上的教學!