跳至主要內容
FinLab

財報爬蟲超簡單:用 Python 一次抓綜合損益、資產負債、營益分析表

本系列已經介紹了各式各樣的爬蟲,從每天、每月,現在終於要季了,在尋找了各式各樣的網站,交叉比對之下,發現公開資訊觀測站的總報表還滿好抓的,所以就從這個網站下手。

Python中有個非常好用的package,叫做pandas,利用它我們就可以簡潔的把網頁上的表格,轉換成dataframe,也就是整理成程式看的懂的表格,我們幾乎不需要做太多的處理!這也是我喜歡用python一點。

這邊我用的是python3 喔~可能要注意一下,另外pandas的版本不一樣,可能會導致網頁轉dataframe的時候,有點小不一樣,可能要稍微檢查一下,我是用0.20.3這個版本。

財報爬蟲

顯示程式碼
import requests
import pandas as pd
import numpy as np
 
def financial_statement(year, season, type='綜合損益彙總表'):
 
    if year >= 1000:
        year -= 1911
 
    if type == '綜合損益彙總表':
        url = 'https://mops.twse.com.tw/mops/web/ajax_t163sb04'
    elif type == '資產負債彙總表':
        url = 'https://mops.twse.com.tw/mops/web/ajax_t163sb05'
    elif type == '營益分析彙總表':
        url = 'https://mops.twse.com.tw/mops/web/ajax_t163sb06'
    else:
        print('type does not match')
 
    r = requests.post(url, {
        'encodeURIComponent':1,
        'step':1,
        'firstin':1,
        'off':1,
        'TYPEK':'sii',
        'year':str(year),
        'season':str(season),
    })
 
    r.encoding = 'utf8'
    dfs = pd.read_html(r.text, header=None)
 
    return pd.concat(dfs[1:], axis=0, sort=False)\
             .set_index(['公司代號'])\
             .apply(lambda s: pd.to_numeric(s, errors='ceorce'))

這個function的用法,就跟月爬蟲是一樣的,可以直接輸入西元或國曆,然後第n季,只能輸入1~4季喔~不然會當掉,最後還要輸入哪一種財報:

  • 綜合損益彙總表
  • 資產負債彙總表
  • 營益分析彙總表

都可以爬取喔!以下就是利用這個function所爬取的資料

Python 財報爬蟲爬取公開資訊觀測站綜合損益彙總表並轉成 pandas dataframe 的結果

大家可以看到有些columns怪怪的,例如 “合計:共 808 家” 這個是什麼鬼XDD,由於我一次爬了三個表,這一點小問題應該還好啦!XDD,可以再寫一行code刪除該列就好了。

基本上資料都是對齊的,不用太擔心。

爬完之後就交給大家自由發揮囉~~可以做很多事情。 總算各種股價、財報、月報的爬蟲都分享完了~

接下來就是真的利用這些資料來選股囉!

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始