你真能向一條魚解釋在陸地上行走的感覺嗎?對魚來說,陸上的一天勝過幾千年的空談。
巴菲特
單季EPS = 單季稅後淨利 / 已發行股數
但是到處google, 找不到己發行股數。
己發行股數隱含在股本,實收資本額(google還是有效的)裏。
可以自行在觀測站裏搜尋。
昨晚找到的損益表,寫程式得一家一家搜集EPS。
不知道是資質駑鈍,還是老眼昏花,昨晚沒找到季總表,今天直接就找到了,且有轉csv檔。
網站很有玄機呢?昨天,今天看到的表不太一樣。
彙總報表下的http://mops.twse.com.tw/mops/web/t163sb04損益表。
看了一下轉csv檔的url:102年第一季,POST /server-java/t105sb02 firstin=true&step=10&filename=t163sb04_20130926_211429845.csv
,102年第二季,t163sb04_20130926_21205674.csv,
本來有點難受,看不出csv檔命名的規則,後來看一下轉出來的csv檔,
網站做得很親和,一部分一部分可轉csv檔,那反而照成困難,直接抓網頁比較方便。
第二個難題接著出現:
如圖中顯示的,基本每股盈餘(元)的欄位,位置不固定。
有點傻眼,每家公司應該傳固定的格式給觀測站,讓他匯總後,轉成網頁,公開給人民閱讀,
怎麼會放置位置不一樣?
測試過後的整合程式碼如下:
tbls=sp.find_all('table',attrs={ 'class' : "hasBorder"})
#print(tbls)
for tbl in tbls:
ths=tbl.find_all('th')
#print(ths)
i=0
j=0
for th in ths:
i=i+1
if "每股盈餘" in th.get_text():
print(i,ths[i-1].get_text())
j=i
trs=tbl.find_all('tr',attrs={ 'class' : "even"})
for tr in trs:
tds=tr.find_all('td')
print (tds[0].get_text(),tds[1].get_text(),tds[j-1].get_text())
trs=tbl.find_all('tr',attrs={ 'class' : "odd"})
#print(trs)
for tr in trs:
tds=tr.find_all('td')
print (tds[0].get_text(),tds[1].get_text(),tds[j-1].get_text())
output:
17 基本每股盈餘(元)
2801 彰化銀行 0.32
2809 京城銀行 0.98
2812 台中銀行 0.34
2820 華票 0.55
2834 臺灣企銀 0.15
2836 高銀 0.16
2837 萬泰銀行 0.34
2838 聯邦銀行 0.34
2845 遠東商銀 0.41
2847 大眾銀行 0.24
2849 安泰銀行 0.48
19 基本每股盈餘(元)
2855 統一證券 0.23
2856 元富證券 0.21
6005 群益證 0.12
25 基本每股盈餘(元)
1101 台泥 0.38
1102 亞泥 0.40
1103 嘉泥 0.13
1104 環球水泥 0.30
1108 幸福水泥 0.17
1109 信大水泥 0.09
1110 東泥 0.11
1201 味全公司 0.58
1203 味王公司 0.35
小結:這次寫擷出EPS值的過程,除了EPS位置不固定,筆者是先在th段裏,找出EPS的位置,再給後續的tr, 相同的td位置用。而另外一個異常又跑出來了,
tr的style用了{ 'class' : "even"}及{ 'class' : "odd"},
導致一些公司沒有擷到。還好都順利排除了。
擷取data有點好玩的地方,大概是無法預期對方的表格輸出的規則,所以預備好的進度,又延後了,
大概會到最後一週,做圖表的產量才會穩定,目前算是試量產階段。