search
【python】如何利用python輕鬆抓取上市櫃股票清單

【python】如何利用python輕鬆抓取上市櫃股票清單

image

因為陳陳在研究所時就是在學程式跟股市的結合,而我們最常用的程式就是python

陳陳想說就來分享一下我們是如何學習的吧!!

今天先從簡單的來開始,我們的目標就是將上市櫃公司資訊爬下來

沒錯就是這麼簡單的任務,我們只要透過幾行程式就能抓下來喔!!

雖然大家會想說我從網路上複製再貼上Excel就好啦,何必那麼麻煩呢?

沒錯,一開始淺的東西大家會想說有簡單的方式能做到,但未來再做分析或預測時,成千上萬的資訊我們總不會還在一一複製吧

所以陳陳只是教一個概念,學會抓上市櫃股票下來,就能再延伸出去,像是股價、成交量等等,都是差不多的方式去爬取下來

那話不多說,我們開始進入教學吧!!

 

【Step1 找到上市櫃股票清單的地方】

首先要爬蟲當然要先知道要去哪爬,所以我們先去〝台灣證券交易所〞找尋相關資料

進到台灣證券交易所後,我們點選上方的產品與服務

image

接下來選擇證券編號查詢

image

進去以後點選證券編號 分類查詢

image

 

進去以後我們能在市場別選擇上市或上櫃等等的市場,有價證券別的部分可以選要股票或ETF等等

image

那陳陳今天以上市股票為例子做爬取,上櫃一樣,只要市場別選上櫃,然後爬取操作步驟差不多

 

【Step2 利用python的requests將資料爬蟲下來】

首先我們先將我們的網址連結複製下來

這是我們上一步查詢到的上市股票清單

https://isin.twse.com.tw/isin/class_main.jsp?owncode=&stockname=&isincode=&market=1&issuetype=1&industry_code=&Page=1&chklike=Y

那在這次的爬蟲我們會使用到2個package就是request跟pandas

所以我們先將他們import進來

1     import requests
2     import pandas as pd

image

那接下來就是先利用requests連接到網站,並且將資料抓取下來

requests就像模擬網頁瀏覽器,我們利用request.get將網頁的原始碼抓取下來

3     res = requests.get("https://isin.twse.com.tw/isin/class_main.jsp?owncode=&stockname=&isincode=&market=1&issuetype=1&industry_code=&Page=1&chklike=Y")
4     
print(res.text)

image

 

【Step3 利用python的pandas將資料轉換成DataFrame

到這裡我們就算把上市股票抓下來了,但我們不是要原始碼,我們是要前台的那些資料阿~~

沒錯,所以接下來我們要將資料傳換成DataFrame

那這時我們就要用到上一步所提到的pandas

pandas就有點像我們的Excel,pandas可以操作各式各樣的表格,並進行運算

所以這裡我們利用pandas裡面的pd.read_html將我們上一步抓取的res.text的原始碼作轉換

而最後的[0]是表示,我們只抓取原始碼的第一段,因為通常一個網頁會有很多欄位,像是側欄等等,所以我們就選取我們資訊所在的位置

最後就會跑出我們想要的上市股票的清單欄位拉

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

image

 

【Step4 將資料進行整理

接下來我們要將資料做個整理,好讓我們在看時能輕鬆簡單的看

那首先我們就是要將不必要的欄位刪除,就看各位不需要什麼自己決定吧

陳陳是認為頁碼編號、國際證券編號、有價證券別、CEICode跟備註是陳陳不需要的

所以陳陳要將他們刪除

那這裡我們就利用drop來刪除不必要的欄位

大家有看到上一張圖的最上方有出現0、1、2、3等9行嗎跟左方也有,我們drop掉他們只需要輸入數字就好了,是不是很方便

而axis是表示你要刪掉行的還是列的,0代表行,1代表列,如果不輸入他預設值就是0

7     df = df.drop([0,1,5,8,9],axis = 1)
8     df

image

 

接下來上方跟左方的數字不好看,所以我們要做替換,上方我們用名稱也就是第0行來做替換,左方我們用有價證券代碼也就是第2列替換,這樣子比較好看

首先我們先處理上方的名稱,df.columns表示我的標題欄位要是哪一行,我們用df.iloc[0],也就是第0行來做替換

接下來,我們已經替換了標題欄位,那我們就不需要第0行了,我們將df定義只要從第1行開始就好,也就是df.iloc[1:]表示從1到結束

這樣我們就完成上方的替換了

9       df.columns = df.iloc[0]
10     df = df.iloc[1:]
11     df

image

接下來我們替換一下左邊的欄位名稱

左邊的欄位名稱我們稱為索引欄,也就是我們查詢時要查詢的欄位,所以我們會用到df.set_index來替換,括號內就輸入要替換的列名就可以了

12     df = df.set_index("有價證券代號")
13     df

image

恭喜,到這裡我們就大功告成的將資料爬取下來了

那有人會問這些資料爬取下來要做甚麼呢?

這些資料爬下來就可以進行分析以及計算了,能夠化成圖表等等的方式呈現,甚至是跟其他資料做結合等等

這些教學我們往後有時間再一一為各位做教學

熱門推薦

陳陳的嘉理
寫了148篇文章,獲得0次喜歡
留言回覆
回覆
精彩推薦