iT邦幫忙

DAY 12
2

用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表系列 第 12

用python抓網頁data,及做圖表之十二:EPS及股價

  • 分享至 

  • xImage
  •  

絕不投資財報令人看不懂的公司。
巴菲特

開一個table來放EPS.
年,季(放1,2,3,4),公司代號,公司名稱,EPS

import sqlite3
conn = sqlite3.connect('revenue.db')
c = conn.cursor()
c.execute('''CREATE TABLE eps
             (yr real, qr real, cpyid text,cpyname text, eps real 
			 )''')
conn.commit()

把今年第一季寫入
在昨天的基礎上,加一些insert sql

import urllib.request
from bs4 import BeautifulSoup
url = 'http://mops.twse.com.tw/mops/web/ajax_t163sb04?'\
        'encodeURIComponent=1&step=1&firstin=1&off=1&TYPEK=sii&year=102&season=01'
response = urllib.request.urlopen(url)
html = response.read()
sp = BeautifulSoup(html.decode('utf8'))
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())
        epslist=(102,1,tds[0].get_text(),tds[1].get_text(),float(tds[j-1].get_text()))
        c.execute('INSERT INTO eps VALUES (?,?,?,?,? )', epslist) 
        
    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())        
        epslist=(102,1,tds[0].get_text(),tds[1].get_text(),float(tds[j-1].get_text()))
        c.execute('INSERT INTO eps VALUES (?,?,?,?,? )', epslist) 

conn.commit()

測一下寫入是否正常,
將第一季的eps之王,排序出來。

for row in c.execute('SELECT * FROM eps order by 5 desc') :
    print (row)

output:(節錄)
(102.0, 1.0, '5534', '長虹', 19.72)
(102.0, 1.0, '3673', 'F-TPK', 14.19)
(102.0, 1.0, '3008', '大立光', 13.79)
(102.0, 1.0, '2548', '華固建設', 11.32)
(102.0, 1.0, '2357', '華碩', 8.04)
(102.0, 1.0, '2542', '興富發', 6.45)
(102.0, 1.0, '5264', 'F-鎧勝', 5.24)
(102.0, 1.0, '2474', '可成科技', 5.22)
(102.0, 1.0, '2727', '王品', 4.69)
(102.0, 1.0, '2059', '川湖', 4.4)
(102.0, 1.0, '2227', '裕隆日產', 4.27)
(102.0, 1.0, '2207', '和泰汽車', 3.86)

和財報狗比對一下,第一季長虹真的是19.72,第二季是-0.96,所以筆者沒抓錯。
**url = 'http://mops.twse.com.tw/mops/web/ajax_t163sb04?'\
'encodeURIComponent=1&step=1&firstin=1&off=1&TYPEK=sii&year=102&season=01'**同理,第二季就把season改成02即可,第三季目前還沒出來,出來season再改成03。
就不佔篇幅了。
馬上來看一下累計EPS排行

for row in c.execute('SELECT * FROM eps where yr=102 and qr=2 order by 5 desc') : #order by 5 desc
    print (row)

output: 節錄
(102.0, 2.0, '3008', '大立光', 28.96)
(102.0, 2.0, '3673', 'F-TPK', 23.77)
(102.0, 2.0, '5534', '長虹', 18.73)
(102.0, 2.0, '2357', '華碩', 14.37)
(102.0, 2.0, '2008', '高興昌', 13.12)
(102.0, 2.0, '2548', '華固建設', 10.93)
(102.0, 2.0, '2227', '裕隆日產', 10.2)
(102.0, 2.0, '2474', '可成科技', 10.07)
(102.0, 2.0, '5264', 'F-鎧勝', 9.02)
(102.0, 2.0, '2727', '王品', 8.07)
(102.0, 2.0, '2454', '聯發科', 7.8)
(102.0, 2.0, '2542', '興富發', 7.56)
(102.0, 2.0, '2059', '川湖', 7.55)
(102.0, 2.0, '2207', '和泰汽車', 6.91)
(102.0, 2.0, '2707', '晶華酒店', 5.85)
(102.0, 2.0, '3454', '晶睿', 5.81)
(102.0, 2.0, '1590', 'F-亞德', 5.01)

覺得看累計EPS比較符合一般的看法,一季一季拆開看反而比較不一般。
所以就不還原成單季EPS了!!這也是另一個練習題

小結:這個版本不做成for迴圈版,之後每一季過時,小改一下就可以用了。而歷史資料再用迴圈來寫。eps可以做成兩個表,一個是累計eps, 一個是季別eps, 想看單季,或看累計直接抓即可。


上一篇
用python抓網頁data,及做圖表之十一:抓EPS之二
下一篇
python抓網頁data,及做圖表之十七:抓83年到目前的月均股價遭遇效能問題
系列文
用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
0
pajace2001
iT邦研究生 1 級 ‧ 2013-09-28 22:10:12

python 真的是太強大了 拍手

我要留言

立即登入留言