三大法人爬蟲:Python實作教學

三大法人是台灣獨有的資料,每一檔股票每天都會公佈,非常實用!
之前也有介紹利用「投信買賣超」來交易的策略,相信如有看到並使用過的人,就知道它的威力!

thumbnail 1 3

三大法人買賣超還有很多種用法,我們之後再一一說明,
今天最主要就是先獲取到「三大法人」的資料!之後呢,我們會利用這個財經資料
來建立一個投信買賣超的簡單策略。

import requests
from io import StringIO
import pandas as pd

date = '20180102'
r = requests.get('http://www.tse.com.tw/fund/T86?response=csv&date='+date+'&selectType=ALLBUT0999')#
df = pd.read_csv(StringIO(r.text), header=1).dropna(how='all', axis=1).dropna(how='any')
df
df 2

什麼!這樣就爬好了~!對呀~那請問怎麼把他們都存在資料庫中呢?
假如您有上課程的話,可以結合我們寫好的GUI外掛可以用:

# finlab 軟體包要上課才有喔~
from finlab.crawler import widget, date_range

# 讀入一些package
import sqlite3
import os
import requests
from io import StringIO
import pandas as pd

# 爬取資料
def crawl_legal_person(date):
    
    # 將時間物件變成字串:'20180102'
    datestr = date.strftime('%Y%m%d')
    
    # 下載三大法人資料
    try:
        r = requests.get('http://www.tse.com.tw/fund/T86?response=csv&date='+datestr+'&selectType=ALLBUT0999')#
    except:
        return None

    # 製作三大法人的DataFrame
    try:
        df = pd.read_csv(StringIO(r.text), header=1).dropna(how='all', axis=1).dropna(how='any')
    except:
        return None
    
    # 微調整(為了配合資料庫的格式)

    # 刪除逗點
    df = df.astype(str).apply(lambda s: s.str.replace(',',''))

    # 刪除「證券代號」中的「"」和「=」
    df['stock_id'] = df['證券代號'].str.replace('=','').str.replace('"','')

    # 刪除「證券代號」這個欄位
    df = df.drop(['證券代號'], axis=1)

    # 設定index
    df['date'] = date
    df = df.set_index(['stock_id', 'date'])
    
    # 將dataframe的型態轉成數字
    return df.apply(lambda s: pd.to_numeric(s, errors='coerce')).dropna(how='all', axis=1)

# 打開資料庫
conn = sqlite3.connect(os.path.join('data', 'data.db'))

# 開啟GUI介面
widget(conn, 'legal_person', crawl_legal_person, date_range)
gui

才多加幾行,我們就將GUI的插件給寫好了~
可以調整時間範圍,來下載每天的三大法人買賣超,並且存在資料庫裡面~
下一次我們就來實做三大法人的策略囉!敬請期待~!

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!