先直接上程式碼
將上述程式碼拆分成四個階段:
1. import package2. 進入目標網站,爬取網頁盤後資訊3. 篩選出個股盤後資訊4. 選股
Step1. Import Package
首先會使用到三個package,分別是:
- requests — 建立HTTP請求,從網頁上獲取想要的資料
- pandas — 建立系統化的表格資訊,方便後續資料應用
- StringIO — 進行檔案讀寫
程式一開始先將這兩個package import進來,如果電腦沒裝過上面這些套件,記得先用pip安裝,不然import時會產生error。
Step2. 進入目標網站,爬取網頁盤後資訊
台股大盤的每日統計資訊可以從台灣證卷交易所取得,我們的目標就是透過這個網站將指定日期的股票交易資訊爬取下來。進到網站後,從網址列可以看到日期格式,將想爬取的日期依照相同的格式代入網址的URL中:
Step3. 篩選個股盤後資訊
爬下來的網頁包含ETF、指數及個股資訊,假設今天要爬取的是個股的盤後資訊,我們得先知道爬取下來的資料型態才可以進一步做篩選,先使用r.text印出剛剛爬下來的資料,觀察到每個欄位是以逗號分隔、而每一筆資料是以\r\n分隔。
先將資料用換行符號(\n)切割成一筆一筆的串列後,再把不同資料間的型態與格式整理成下表:
指數因為沒有開盤價、收盤價、本益比等等的資訊,所以資料長度是三個裡面最短的。而ETF跟個股雖然都有17個欄位,但是ETF的資料開頭多了一個(=)做區隔,因此可以利用上述的資訊將個股篩選出來。
Step4. 選股
現在各股的盤後資料已經被切割成一筆一筆的串列,為了後續的選股方便,利用pandas的read_csv( )將資料轉換成dataframe格式。不過須特別注意的是,因為前面字串切割時已經把換行字元去除,因此得先透過join( )把串列透過換行符號再次合併起來。
顯示的資料的筆數若超過100筆,pandas默認只會顯示前後100筆,可能會造成數據顯示不完整的狀況。如果希望數據能完整顯示的話,可以將pandas的列數限制設成null。
最後列出幾個pandas好用的方法幫助我們篩選股票:
- 利用股票代號/股票名稱選取指定的股票
// 股票代號
index = list(df['證券代號']).index('9943')
df.loc[index:index]// 股票名稱
index = list(df['證券名稱']).index('台積電')
df.loc[index:index]
- 挑選符合特定條件的股票
// 挑選本益比小於10的股票
df[(pd.to_numeric(df['本益比'], errors='coerce') < 10) &
(pd.to_numeric(df['本益比'], errors='coerce') > 0)]
- 依特定欄位做排序
// 依照收盤價由低至高排序
df['收盤價'] = df['收盤價'].apply(pd.to_numeric, errors='coerce')
df.sort_values(by='收盤價')
以上就是python爬取每日個股資訊的教學,如果有任何問題或討論的話都可以留言給我喔 😃 😃 😃
[2023/1/9] 新增上櫃公司盤後統計資訊 (需自行更改日期與股票代號)