2022年3月28日 星期一

[挑戰用python寫一支股票工具] Day1 抓取每月累積營收年增率

鏘鏘鏘!!! 距離上一篇要挑戰用python抓取公開資訊站資料的文章,轉瞬間就過了半年多。只能說歲月不饒人,拖延症大爆發。工作繁忙絕對是最好的藉口。

經過半年的思索,與重新整理股票追蹤的方式,加上近期對這九年來的投資紀錄做了一個總整理,我理出了一個比較恰當且親民的方式提供給大家。 我打算在以Google雲端為基底,在雲端Google Sheet(Excel)上建立選股追蹤清單,至於財務數據,則定期使用python爬蟲抓取後,用複製貼上的方式到Google Sheet上建立追蹤模式。這部分會慢慢分享給大家。

廢話不多說,今天先來貢獻第一篇: 抓取累積月營收年增率

這個小品的嘗試是最基礎的延伸,我會慢慢套用到各種不同的財務報表指標,但最終目的是擷取這些資料然後複製貼到Google Sheet上去做後續追蹤,我會慢慢分享各種小技巧,也歡迎箇中高手一起討論。

選用"月累計營收年增率"的參考價值在於月營收的公佈是財報揭露的最快更新項(每月一次),他能協助投資人在第一時間先了解這間公司營收的走向,進而當作公司成長、衰退的其中一個指標。

關於用Python抓取公開資訊站的方式,我是參考這篇網站的步驟來進行,建議使用者可以先拜讀這個網站的做法。 我僅使用其應用在我需要的部分。

大致上,目前的公開資訊站是採用post的方式來訪問資料。而今天要抓取月營收的資料,以目前公開資訊站的檢索網址為如下:https://mops.twse.com.tw/mops/web/t05st10_ifrs (未來會不會改變還不清楚)

粗略步驟演示如下,若需要更詳細的說明請在留言給我,我會盡可能回覆。

1. 當使用者點開網址後,可看如下顯示 (我使用Chrome瀏覽器):


2. 參考網站作法,在此網頁空白處按右鍵->檢查 (或按F12),即會跳出右邊程式碼的部分,然後選擇Network (如右邊箭頭紅框所示)


3.此時,在網站上輸入想要查詢的公司代碼((如左邊箭頭紅框所示),年份和月份。選擇"歷史資料",然後點選"查詢"按鈕,這時候可以注意到顯示出財報資訊的同時,右邊程式碼也跑出了一串(如右邊箭頭紅框所示)。 這些資訊便是來自於剛剛你輸入想要網站幫你查詢的資訊。這些程式碼也是要填到python裡面去做自動爬取資料用的代碼。
可以看幾個關鍵字:
isnew:false  這行代表你選擇"歷史資料",若你選擇"最新資料",則會變成true
co_id:這行代表你輸入的公司代碼,在這個範例我輸入6263 (普萊德)
year: 這行代表你輸入的年份,在這個範例為民國111年
month:這行代表你輸入的月份,在這個範例為2月



有了這些關鍵參數,使用我提供的範例python 腳本(附上腳本下載連結),經過測試後,可以抓取表格中的第八列:增減百分比 ,也就是月累積營收年增減率。


使用程式時,可在latest_revenue這個變數裡面取得20.41這個值。



以上,我們就可以成功抓取表格中"增減百分比"這個值。 當然你說如果想要抓取本月的"106,127"這個數值可不可以。 當然可以,只要將程式碼中的最後一行改為latest_revenue.append(dfinfo.iloc[0,1]) 就可以囉。

至於程式碼的細項說明,我就不特別花時間談了,有想深入了解的人再留言給我,我會找時間一一為大家解答唷!

================================程式碼================================

"""

Day1範例-抓取每月累積營收年增率

"""

import requests

import pandas as pd


#####

url = 'https://mops.twse.com.tw/mops/web/t05st10_ifrs'  #獨立報表-採用ifrs後肢月營收

year=111    # 使用者輸入處: 年份(民國)

month=2     # 使用者輸入處:月份(1,2,3...10,11,12)

co_id=6263  # 使用者輸入處 :公司代碼

###

latest_revenue=[]


if month>=10:

        month=str(month)

else:

   month="".join(['0',str(month)])

       

postinfo={

   'encodeURIComponent':1,

   'step':1,

   'firstin':1,

   'off':1,

   'queryName':'co_id',

   'inputType':'co_id',

   'TYPEK':'all',

   'isnew':False,  #false:歷史資料  true:最新資料

   'co_id':co_id,

   'year':str(year),

   'month':month,

}

headers = {'Connection': 'close'}  # prevent pop up error:max retries exceed with url

info= requests.post(url,postinfo,headers=headers)  #post to URL

info.encoding = 'utf8'

dfinfo = pd.read_html(info.text, header=None)[10]  #data is in list[10]

latest_revenue.append(dfinfo.iloc[7,1])  #row-7 累計增營收減百分比



沒有留言:

張貼留言

[讀時光] 教養與自我的情緒克- 薩提爾的親子情緒課 (李儀婷 著)

周末花時間一口氣看完了薩提爾的親子情緒課一書。雖然目前還是準爸爸,實際等到要教養自己的小孩也是兩三年之後,但我覺得這本書其實闡述了一些很重要的溝通法則,這些通則或許偶爾不那麼合用在現實成人世界上,但卻有助於內化自省,讓自己成為更好的人。即使沒有小孩需要教養,依然可以把它當成一本心...