返回列表 上一主題 發帖

[原創] python上市櫃三大法人買賣超日報資料下載

[原創] python上市櫃三大法人買賣超日報資料下載

可用來下載上市櫃三大法人買賣超日報資料。與py檔同一路徑下的path.ini可設定csv存放位置,注意路徑要包括最後一個"\",如:C:\user\desktop\test\。
附上執行檔
  1. import requests
  2. import time
  3. import os

  4. mydate = time.strftime("%Y/%m/%d")
  5. year = str(int(mydate[0:4])-1911)
  6. mydate2 = mydate.replace(mydate[0:4],year)

  7. setting = os.getcwd() + "\\" + "path.ini"

  8. if os.path.exists(setting):
  9.     with open(setting, 'r') as r:
  10.         path = r.read()
  11.     if not os.path.exists(path):
  12.         os.makedirs(path)
  13. else:
  14.     path = ""

  15. headers = {"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}


  16. url1 = "http://www.twse.com.tw/ch/trading/fund/T86/T86.php"
  17. payload1 = {"download": "csv",
  18.             "qdate": mydate2,
  19.             "select2": "ALLBUT0999",
  20.             "sorting": "by_issue"}

  21. res1 = requests.post(url1, headers=headers, data=payload1, stream=True)

  22. fName1 = path + mydate.replace("/","") + ".csv"

  23. with open(fName1, 'wb') as f1:
  24.     for chunk in res1.iter_content(1024):
  25.         f1.write(chunk)


  26. url3 = "http://www.tpex.org.tw/web/stock/3insti/daily_trade/\
  27. 3itrade_hedge_download.php?l=zh-tw&se=EW&t=D&d=" + mydate2 + "&s=0,asc,0"

  28. res3 = requests.get(url3, headers=headers, stream=True)

  29. fName3 = path + "BIGD_" + mydate2.replace("/","") + ".csv"

  30. with open(fName3, 'wb') as f3:
  31.     for chunk in res3.iter_content(1024):
  32.         f3.write(chunk)


  33. url2 = "http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php"
  34. payload2 = {"download": "csv",
  35.             "qdate": mydate2,
  36.             "selectType": "ALLBUT0999"}

  37. res2 = requests.post(url2, headers=headers, data=payload2,stream=True)

  38. fName2= path + "A11" + mydate.replace("/","") + ".csv"

  39. with open(fName2, 'wb') as f2:
  40.     for chunk in res2.iter_content(1024):
  41.         f2.write(chunk)
  42.         

  43. url4 = "http://www.tpex.org.tw/web/stock/aftertrading/otc_quotes_no1430/\
  44. stk_wn1430_download.php?l=zh-tw&d=" + mydate2 + "&se=EW&s=0,asc,0"

  45. res4 = requests.post(url4, headers=headers, data=payload2,stream=True)

  46. fName4 = path + "SQUOTE_EW_" + mydate2.replace("/","") + ".csv"

  47. with open(fName4, 'wb') as f4:
  48.     for chunk in res4.iter_content(1024):
  49.         f4.write(chunk)
複製代碼

本帖最後由 VBALearner 於 2016-8-16 23:10 編輯

回復 1# zyzzyva

等一下!!!乾~~~這太猛了吧O___Q 居然過了一段時間...還有人再研究我的主題,有關如何下載的內容......只能說感動T___T
小弟我原本想再丟一個開發到一半的籌碼資料整理檔,內附選股表單功能與進場績效紀錄功能,和Z大共襄盛舉重啟這個主題並分享其所學,但礙於上傳限制(1MB),只好作罷,以文字交流之(嘆~)
Z大高手!!! 小弟我最近剛好也開始想學最近很火紅的Python,只不過還在摸索階段,畢竟市面上有關Py的書不多,不像VBA這種算是熱門又簡單的書籍...Z大真是勾起我對Pyhton程式的莫大興趣>w<!!! 可以請教您,幾個問題嗎? 第一,這個執行檔是全部都用Python寫的嗎?!! 您貼上來的程式碼是用Python寫的嗎? 還是Py與VBA兩者結合呢?!(看起來不像有參雜VBA語法...我幾乎看不懂xD,您於文初雖然有簡單說明,但小弟我還是甭琢磨了,先一旁玩沙去~) 。第二,您是如何學習Py的xD? 是自學、上課、還是有類似的論壇呢?  期望能站在Z大的肩膀上學習邁進OwO!!!
真心感謝每一位願意分享所學、指導新手的人!

TOP

回復 2# VBALearner
您過獎了。這個是python的code,如果沒有安裝python,可以下載執行檔,再在vba裡用shell的方式執行。
抓網路資料方面python還滿好用的,網路上資源很多,我也是為了抓資料東學一點西學一點,拿別人的東西修修改改。找時間再補上註解,應該會比較清楚。

TOP

版大
您的檔案下載後,執行getTwseOtc.exe後沒有反應,可以再說明清楚一點嗎?
謝謝

TOP

回復 3# zyzzyva
檢查目錄內之檔案內容如圖示:

TOP

回復 5# c_c_lai

再重新下載解壓縮後可正常執行
TKS
研究PYTHON中~~

TOP

回復 5# c_c_lai

應該是因為我沒有處理時間(下載的日期是直接取當日的日期),如果是資料還沒出來的時候執行下載就會出現問題。
請在傍晚的時間再試試看。

TOP

回復 7# zyzzyva
剛剛我試了一下,OK 了。
請教一下我有下載 Python35 但是還需要怎樣的模組
條件下,才能完整執行你附上的 .py 檔呢?
Python 是有練習過,但無實務作業經驗,
還請多多指教!

TOP

回復 1# zyzzyva
補上註解。
  1. #匯入模組(requests需另外安裝,也可使用urllib2)
  2. import requests
  3. import time
  4. import os

  5. #取得當前日期
  6. mydate = time.strftime("%Y/%m/%d")

  7. #將西元年轉為民國年
  8. year = str(int(mydate[0:4])-1911)

  9. #將民國年取代日期中之西元年
  10. mydate2 = mydate.replace(mydate[0:4],year)

  11. #os.getcwd()取得當前路徑
  12. setting = os.getcwd() + "\\" + "path.ini"

  13. #檢查path.ini是否存在,若有則將csv存檔之路徑讀入
  14. if os.path.exists(setting):
  15.     with open(setting, 'r') as r:
  16.         path = r.read()
  17.     #若csv存檔之資料夾不存在則建立資料夾
  18.     if not os.path.exists(path):
  19.         os.makedirs(path)

  20. #若path.ini不存在則將path設為空字串
  21. else:
  22.     path = ""

  23. #設定header
  24. headers = {"User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36"}

  25. #設定url
  26. url1 = "http://www.twse.com.tw/ch/trading/fund/T86/T86.php"

  27. #設定post查詢之資料
  28. payload1 = {"download": "csv",
  29.             "qdate": mydate2,
  30.             "select2": "ALLBUT0999",
  31.             "sorting": "by_issue"}

  32. #發出request並將網站回覆之資料存入res1變數中
  33. res1 = requests.post(url1, headers=headers, data=payload1, stream=True)

  34. #設定csv檔案之路徑與檔名
  35. fName1 = path + mydate.replace("/","") + ".csv"

  36. #將res1的資料寫入csv中
  37. with open(fName1, 'wb') as f1:
  38.     for chunk in res1.iter_content(1024):
  39.         f1.write(chunk)
複製代碼

TOP

回復 8# c_c_lai
只要安裝requests就可以了。

TOP

        靜思自在 : 天上最美是星星,人生最美是溫情。
返回列表 上一主題