本系列已經介紹了各式各樣的爬蟲,從每天、每月,現在終於要季了,在尋找了各式各樣的網站,交叉比對之下,發現公開資訊觀測站的總報表還滿好抓的,所以就從這個網站下手。
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季喔~不然會當掉,最後還要輸入哪一種財報:
- 綜合損益彙總表
- 資產負債彙總表
- 營益分析彙總表
大家可以看到有些columns怪怪的,例如 “合計:共 808 家” 這個是什麼鬼XDD,由於我一次爬了三個表,這一點小問題應該還好啦!XDD,可以再寫一行code刪除該列就好了。
基本上資料都是對齊的,不用太擔心。
爬完之後就交給大家自由發揮囉~~可以做很多事情。
總算各種股價、財報、月報的爬蟲都分享完了~
接下來就是真的利用這些資料來選股囉!