[Python-金融] 下載證交所成交量前20名股票

利用公開資訊將資料截取並存至資料庫

供後續做相關分析

利用套件有:sqlite3、pandas、requests、date、timedelta

<程式碼僅供參考練習>

開始前,已經先建立過currency.sqlite資料庫

並在資料庫中建立F_Transaction20的資料表

#查詢資料庫是否已經撈過當天資料
import sqlite3
import pandas
conn=sqlite3.connect('currency.sqlite')
df=pandas.read_sql('select strftime("%Y%m%d",日期) as 日期 from F_Transaction20 order by 日期 desc LIMIT 1',con=conn)
lastdate=''
if len(df)==1:
    lastdate=str(df["日期"][0])
from datetime import date,timedelta
def getdate():
    today=date.today()
    datearr=str(today).split('-')
    #陣列
    twdate='%2F'.join ([str(int(datearr[0])-1911),datearr[1],datearr[2]])
    return twdate

today=str(date.today()).replace('-','')
#print (lastdate);
#print (today);
#撈取證交所提供的資料下載功能連結
if lastdate!=today:
    import requests
    from bs4 import BeautifulSoup
    url='http://www.twse.com.tw/ch/trading/exchange/MI_INDEX20/MI_INDEX20.php?download=&qdate={0}'

    res=requests.get(url.format(getdate()))
    soup=BeautifulSoup(res.text,"lxml")
    tr_all=soup.select('table tr')
##第二列
#print(tr_all[1:1])
#寫入資料庫
    cur=conn.cursor()
    sql="insert into f_transaction20(排名,證券代號,證券名稱,成交股數,成交筆數,開盤價,最高價,最低價,收盤價,漲跌,最後買價,最後賣價)  values(?,?,?,?,?,?,?,?,?,?,?,?)"
    for tr in tr_all[2:]:
        td=tr.select('td')
        ret=[td[0].text,td[1].text,td[2].text,td[3].text,td[4].text,td[5].text,td[6].text,td[7].text,
             td[8].text,td[9].text,td[10].text,td[11].text]
        cur.execute(sql,ret)
    conn.commit()
    conn.close()
    print('save done')
else :
    print ('record already exist')

結果:

以上,參考「大數學堂」教學