用python 爬取台灣上市上櫃公司股票代碼

爬取台灣上市上櫃公司股票代碼

今天要小編要介紹給大家如何用python爬取現在台灣上市上櫃的股票代碼,只要簡簡單單的寫幾行程式,網路上的資料就被爬下來了。今天要爬的網路資料如下圖所示,這是網站位置:http://isin.twse.com.tw/isin/C_public.jsp?strMode=2

爬取結果

寫完整個程式小編才知道原來台灣的上市股票總共有916檔阿!!

關鍵代碼:pd.read_html(url)

爬取網頁前需要先安裝python 的pandas套件,pandas是專門做資料處理的,簡單的來說就是表格的處理包,可以想像成程式化的excel,excel可以處理的pandas都能處理,甚至功能更多更強,例如小編要介紹函式read_html,只要給予網站網址就能抓取所有的表格下來,是個非常方便的功能。底下附上完整代碼,header的功能是為了模仿網頁瀏覽器,因為有些網站會擋爬蟲程式碼,因此要偽裝成chrome瀏覽器才能順利爬取資料。

pd.read_html 官網源碼

解決亂碼問題:

小編第一次爬的時候發現爬出來的資料都是亂碼,這時候就必須檢查網頁的原始編碼的形式,結果發現是MS950

print (html_text.encoding) MS950 

加入31行程式,就能使編碼回復成Big5形式囉~

print (html_text.encoding) Big5 

正常資料:

完整程式碼:

處理字串

接下來要處理字串的問題,表格裡的字串包含股票代號以及股票名稱,因此需要把代號特別分隔出來,這裡利用的是regular expression,小編只要有想分隔出的字串都會到下面這個網站測試

regular101:測試regular expression的好網站

上面的表格填寫格式,下面的表格填寫測試,就可以知道抓到什麼字了,被選取到的字會顯示成藍色的,如下圖所示:



再來只要將 regular expression結合進程式碼中就可以單獨取股票代碼出來了

完整程式碼:

 

使用

使用方式非常簡單,由於表格中包含眾多資料,但我們只需要取得特定的列數即可,其他的都是不需要的資料,因此從表格的第2列開始抓取股票代碼出來,一直到918列結束

完整程式碼如下,小編把爬取上市上櫃的代碼都整合在一起了,只要執行以下程式碼就可以輕輕鬆鬆地把台灣上市上櫃的所有股票代號全部抓取下來了~~

0 0 votes
Article Rating
Subscribe
Notify of
guest

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
學習
學習
5 years ago

不好意思
請問這個程式碼應該怎麼執行呢
版主回覆:(04/10/2019 07:35:52 PM)
您跑不出來嗎?? 直接執行應該就可以了

Achilles
Achilles
4 years ago

Darwin大大謝謝您的分享,
利用您的程式碼,我可以直接跑出結果來,中文字的編碼也沒有問題。
但是我的csv檔第一列會出現column index,
"0,1,2,3,4,5,6"
這跟大大的一樣,不曉得要如何拿掉?
另外在第三列也會出現連續的
股票,股票,股票,股票,股票,股票,股票
這跟網頁上看起來是不一樣的,也跟大大的結果不一樣。請問要如何解決?我的pandas的版本是1.0.2。
再次謝謝了。
版主回覆:(04/08/2020 11:36:25 PM)
這個只要把它當成一個pandas的table
然後進行後處理就可以了喔
可以使用pd.drop 之類的函數拿掉某一列
column index 是可以自訂義的
因為我沒有設置所以會出現預設的數字