三大法人爬蟲

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

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

1
2
3
4
5
6
7
8
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

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

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52

# 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的插件給寫好了~
可以調整時間範圍,來下載每天的三大法人買賣超,並且存在資料庫裡面~
下一次我們就來實做三大法人的策略囉!敬請期待~!

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