麻辣家族討論版版's Archiver

zyzzyva 發表於 2016-8-16 22:22

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

可用來下載上市櫃三大法人買賣超日報資料。與py檔同一路徑下的path.ini可設定csv存放位置,注意路徑要包括最後一個"\",如:C:\user\desktop\test\。
[url=https://drive.google.com/open?id=0B8xi7YECb-xmZE5SNTVCeWZZZ28]附上執行檔[/url][code]import requests
import time
import os

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

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

if os.path.exists(setting):
    with open(setting, 'r') as r:
        path = r.read()
    if not os.path.exists(path):
        os.makedirs(path)
else:
    path = ""

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


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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

with open(fName4, 'wb') as f4:
    for chunk in res4.iter_content(1024):
        f4.write(chunk)[/code]

VBALearner 發表於 2016-8-16 23:06

[i=s] 本帖最後由 VBALearner 於 2016-8-16 23:10 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93070&ptid=18219]1#[/url] [i]zyzzyva[/i] [/b]

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

zyzzyva 發表於 2016-8-16 23:49

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93076&ptid=18219]2#[/url] [i]VBALearner[/i] [/b]
您過獎了。這個是python的code,如果沒有安裝python,可以下載執行檔,再在vba裡用shell的方式執行。
抓網路資料方面python還滿好用的,網路上資源很多,我也是為了抓資料東學一點西學一點,拿別人的東西修修改改。找時間再補上註解,應該會比較清楚。

clianghot546 發表於 2016-8-18 15:49

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

c_c_lai 發表於 2016-8-18 16:01

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93078&ptid=18219]3#[/url] [i]zyzzyva[/i] [/b]
檢查目錄內之檔案內容如圖示:
[attach]24968[/attach]

clianghot546 發表於 2016-8-18 16:55

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93108&ptid=18219]5#[/url] [i]c_c_lai[/i] [/b]

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

zyzzyva 發表於 2016-8-18 17:23

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93108&ptid=18219]5#[/url] [i]c_c_lai[/i] [/b]

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

c_c_lai 發表於 2016-8-18 17:42

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93111&ptid=18219]7#[/url] [i]zyzzyva[/i] [/b]
剛剛我試了一下,OK 了。
請教一下我有下載 Python35 但是還需要怎樣的模組
條件下,才能完整執行你附上的 .py 檔呢?
Python 是有練習過,但無實務作業經驗,
還請多多指教!

zyzzyva 發表於 2016-8-18 17:58

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93070&ptid=18219]1#[/url] [i]zyzzyva[/i] [/b]
補上註解。[code]#匯入模組(requests需另外安裝,也可使用urllib2)
import requests
import time
import os

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

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

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

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

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

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

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

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

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

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

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

#將res1的資料寫入csv中
with open(fName1, 'wb') as f1:
    for chunk in res1.iter_content(1024):
        f1.write(chunk)[/code]

zyzzyva 發表於 2016-8-18 22:20

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93113&ptid=18219]8#[/url] [i]c_c_lai[/i] [/b]
只要安裝requests就可以了。

c_c_lai 發表於 2016-8-19 07:11

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93119&ptid=18219]10#[/url] [i]zyzzyva[/i] [/b]
謝謝你,
等我眼睛手術好後再來研究一番,
前些日子我對 Python 還蠻熱衷的,
尚請你多加指教!

zyzzyva 發表於 2016-8-19 07:28

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93124&ptid=18219]11#[/url] [i]c_c_lai[/i] [/b]
您太客氣了,有興趣可以一起研究。也預祝您手術順利,早日康復。

VBALearner 發表於 2016-8-19 19:31

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93115&ptid=18219]9#[/url] [i]zyzzyva[/i] [/b]

喔~謝謝您的教學,我日後會再進一步了解,另外請問一下,模組網址是
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
沒錯吧?

zyzzyva 發表於 2016-8-19 22:04

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93140&ptid=18219]13#[/url] [i]VBALearner[/i] [/b]
是的,那是requests模組的文件沒錯。
內建的urllib模組的功能也差不多,但是我覺得requests比較好用一點。

hanson09 發表於 2016-8-27 21:30

我想請問一下, 樓主是用Python3.5 還是2.7寫的呢,我也剛接觸python,我用3.5,試了很多方式,都無法成轉執行檔

感謝,樓主提供這麼好的東西。非常感謝

zyzzyva 發表於 2016-8-28 07:14

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93360&ptid=18219]15#[/url] [i]hanson09[/i] [/b]我的是3.4,3.5執行應該沒有問題(因為我沒有處理時間,所以要交易日的下午資料出來後執行,抓到的檔案才會完整。)你是執行過不了,還是抓不到完整檔案?有錯誤訊息嗎?

hanson09 發表於 2016-8-28 13:43

樓主,我是想請問,你寫出來的 .py 檔,是如何轉成.exe的。

另外 ,我也想問個同樣的問題,樓主是看書自學python的,還是看網路文章

ps: 我在網路上也抓了不少,python 視訊教學,也希望能寫出支像樣的程式。

zyzzyva 發表於 2016-8-28 21:07

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93374&ptid=18219]17#[/url] [i]hanson09[/i] [/b]我是用Cx_freeze,簡單的程式應該都可以,但如果程式中有用到某些套件,像tinker或lxml之類的,可能就會有問題。學python一開始是工作上需要(要抓一些籌碼資料),老闆拿了一本書給我,叫菲絲恩教你學會python,對基本語法有一些概念以後,就是看網路上的教學,要用到什麼就看什麼,看了一些覺得雖然有學到一點皮毛,不過還滿沒有系統的,所以也買了一些書,有的內容看得懂,有些一知半解,目前就是慢慢看,想說多看之後可能就會懂了。

VBALearner 發表於 2016-8-30 13:23

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93380&ptid=18219]18#[/url] [i]zyzzyva[/i] [/b]

喔~所以樓主是用pip install cx_Freeze模組把Python程式轉成執行檔,要不然其他沒有使用Python的人是不能使用樓主的程式。但是在要給他人使用時,也要連Python的一堆套件模組都要寄送出去,例如request模組,對吧(還是我觀念錯誤,小弟Py新手,請不吝指教?!) 另外想請教樓主,如果我想要改寫您的程式,可以把cx-Freeze已經轉好的執行檔再回溯回原本的py檔再改寫嗎? 還是有其他辦法可以從樓主的檔案夾裡開啟主程式碼的檔案來改寫? (我最近開始學Py,雖然比VBA還難許多倍,但感謝樓主的分享激發了我對Py的熱情,最近也去把樓主分享的那本菲絲恩教你學會Python看完了,雖然實在有夠基本無法有太大的應用層面,但也是個開始OwO!!!)
[attach]25100[/attach]

zyzzyva 發表於 2016-8-30 23:23

[i=s] 本帖最後由 zyzzyva 於 2016-8-30 23:25 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=93430&ptid=18219]19#[/url] [i]VBALearner[/i] [/b]
cx_freeze在包的時候就會把有用到的套件包進去,所以其他人正常來說應該直接就可以使用了。python也有反組譯的工具,但我沒用過,所以詳細情況不太了解,如果要改寫應該直接用我po的code改比較方便。
要轉exe檔的時候,除了要轉的檔案(假設檔名為test.py),還要另外準備一個py檔(假設檔名為setup.py)放在同一個目錄下,內容大概是像這樣:[code]from cx_Freeze import setup, Executable

setup(name='程式的名字',
      version='版本號',
      description='簡單的描述',
      option={"build.exe"},
      executables=[Executable("test.py")])[/code]然後在檔案所在目錄下開啟cmd,執行setup.py build,成功的話在同一個目錄下就會有一個build資料夾,裡頭就是我們要的東西。
其實我覺得python入門不會比vba困難耶,有vba的經驗,我想應該很快就會上手了。雖然我懂的也很有限,但有什麼問題歡迎提出來,大家可以一起研究。

頁: [1] 2 3 4 5 6 7 8 9

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供