超簡單用python抓取每月營收

今天承接上次的超簡單python系列,教大家如何得到每家企業每個月的營收。這個系列的最終目的就是讓大家可以創造自己的投資自動化程式,甚至擁有自己的看盤軟體。

真的不要把程式設計想像的很難,感覺爬2000多支股票,並整理資料,好像是一件很累很痛苦的是情,但真的只需要30行,你可能會覺得這些代碼真的太短了,但真的就是這麼短,然而這必須建立在python或是R,這些package豐富的腳本語言才有可能辦到,這兩個語言都不錯,但我比較喜歡寫python就是了XD,因為python還可以做很多酷炫的事情,例如寫server,或是一些自動化工具,然而R好像沒有這麼多功能?

那我們就來爬取吧!首先先決定要爬哪個網頁,我選擇的是TWSE官方網頁
它的網址是
http://mops.twse.com.tw/nas/t21/sii/t21sc03_103_2_0.html

各位有看到103這個數字嗎?其實這個就是年份,而緊接在後面的 “2” 就是月份,所以只要改動這兩個值,我們就可以下載不同年月的歷史資訊:

月爬蟲
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pandas as pd
import requests
from io import StringIO
import time
def monthly_report(year, month):
# 假如是西元,轉成民國
if year > 1990:
year -= 1911
url = 'http://mops.twse.com.tw/nas/t21/sii/t21sc03_'+str(year)+'_'+str(month)+'_0.html'
if year <= 98:
url = 'http://mops.twse.com.tw/nas/t21/sii/t21sc03_'+str(year)+'_'+str(month)+'.html'
# 偽瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
# 下載該年月的網站,並用pandas轉換成 dataframe
r = requests.get(url, headers=headers)
r.encoding = 'big5'
html_df = pd.read_html(StringIO(r.text))
# 處理一下資料
if html_df[0].shape[0] > 500:
df = html_df[0].copy()
else:
df = pd.concat([df for df in html_df if df.shape[1] <= 11])
df = df[list(range(0,10))]
column_index = df.index[(df[0] == '公司代號')][0]
df.columns = df.iloc[column_index]
df['當月營收'] = pd.to_numeric(df['當月營收'], 'coerce')
df = df[~df['當月營收'].isnull()]
df = df[df['公司代號'] != '合計']
# 偽停頓
time.sleep(5)
return df

以上這段程式碼就是一個function可以在其它地方隨時呼叫,code真的超短,但這樣就夠了!

接下來我們隨意讀取任意年月份(可以用民國或是西元都支援):

月爬蟲
1
2
3
4
5
6
7
# 民國100年1月
monthly_report(100,1)
# 西元2011年1月
monthly_report(2011,1)

就會跑出以下的表格:

月營收狀況

其實寫程式真的好簡單XDD,坊間財經軟體都好貴,不就是幾行code而已,是不是!
目前已經交完 日、月 的資料爬取了,下一次就是一季囉!

當然還有各式各樣可以爬的東西,有時間再跟大家介紹~

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!