網頁

2023年4月30日 星期日

使用 Python 製作台股代碼與股票名稱對應字典(二)

上一篇提到將台股上市上櫃公司名稱從證交所網頁抓下來,並存成 dataframe 的格式,如下:

如果要用 yfinance 來取得股價寫法是:

import yfinance as yf
hist = yf.Ticker('1101.TW') # 台泥
price_df = hist.history(period='1d', auto_adjust=False)

因此我們要有一個 '1101.TW' 可以對應到 '台泥' 的一個 table,我們可以這樣做,

將上一篇得到的 df 的有價證券代號及名稱欄位的值切開,例如上圖,索引0台泥的 '有價證券代號及名稱' 欄位的值是 '1101  台泥',我們要切開成為 '1101.TW' 和 '台泥'

code, name = df['有價證券代號及名稱'][0].split()
print(code, name)

結果:1101 台泥 
將變數code+'.TW',就是股票代碼,股票名稱就是'台泥',然後使用 code 當作字典的key,
name當作字典的value,我們可以用一個迴圈跑完整個 df,順便將產業別也放上去
stock_dict = {}
for index, item in enumerate(df['有價證券代號及名稱']):
name_list = item.split()
code = name_list[0] + '.TW'
name = name_list[1]
key = code
value = [name, df['產業別'][index]]
stock_dict[key] = value
print(index, code, value)

 
 
 
 
 
然後將上面的程式寫成 function: 
# 製作股票代碼與股票名稱dict
def make_stock_dict(df):
stock_dict = {}
for index, item in enumerate(df['有價證券代號及名稱']):
name_list = item.split()
code = name_list[0] + '.TW'
name = name_list[1]
key = code
value = [name, df['產業別'][index]]
stock_dict[key] = value
return stock_dict
要呼叫的時候就這樣寫:
stock_dict = make_stock_dict(df)

返回的變數 stock_dict 是字典型態,
鍵(key)是股票代碼;值(value)是一個list,包含公司名稱和產業別。
這樣就製作了一個台股代碼和公司,名產業別的一個對照清單。

 
你可以參考上一篇:
1. 用 Python 取得台股上市上櫃清單(一)
 
 



2023年4月29日 星期六

用 Python 取得台股上市上櫃清單(一)

各位知道目前台股上市上櫃的公司有多少嗎?
今天用 Python 來抓取台灣證券交易所上市上櫃的公司清單。

台灣證券交易所公佈的上市證券國際證券辨識號碼一覽表網頁在:
https://isin.twse.com.tw/isin/C_public.jsp?strMode=2

 Mode=2是上市資料,Mode=4是上櫃資料,現在先用上市資料來說明。

1.首先先載入相關套件:

import requests
import pandas as pd

2. 將html 網頁資料抓下來存成 dataframe資料格式:

res = requests.get("http://isin.twse.com.tw/isin/C_public.jsp?strMode=2")
df = pd.read_html(res.text)[0]
df

3. 接著設定欄位(column)名稱:

df.columns = df.iloc[0]
df


4.  刪除第一行(Row):

df = df.iloc[2:]
df 


5. 接著要找出CFI code 是 ESVUFR 的資料,其中CFI代碼CBCIXU是不動產投資信託,CEOGEU是ETF . . .

df = df[df['CFICode'] == 'ESVUFR']
df

6. 現在資料有977筆,就是上市公司資料,接著我們要將索引序號重新編排一下:

df = df.reset_index(drop=True)
df

7. 最後我們把這寫成一個 function:

def crawler_stock_name(req_code):
# req_code:2 上市,
# req_code:4 上櫃
res = requests.get("http://isin.twse.com.tw/isin/C_public.jsp?strMode=" + str(req_code))
df = pd.read_html(res.text)[0]
# 設定column名稱
df.columns = df.iloc[0]
# 刪除第一行
df = df.iloc[2:]
# 篩選資料
df = df[df['CFICode'] == 'ESVUFR']
# index 序號重新編號
df = df.reset_index(drop=True)
return df

要取得上市公司的資料就執行:

df = crawler_stock_name(2)
df

要取得上櫃公司的資料就執行:

df = crawler_stock_name(4)
df
上櫃公司809家

下篇再來講一下如何將股票代碼和公司名稱做一個索引。

你可以參考:

1.  使用 Python 製作台股代碼與股票名稱對應字典(二)