利用公開資訊將資料截取並存至資料庫
供後續做相關分析
利用套件有: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')
結果:
以上,參考「大數學堂」教學