COCO研究院

 找回密碼
 註冊
搜索
查看: 26040|回復: 24

證交所的每日收盤行情csv

[複製鏈接]
發表於 14-12-27 22:43 | 顯示全部樓層 |閱讀模式
請問:
有人知道12/27上巿的每日收盤行情csv要如何用python下載
在這網址http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php
以前只要給"http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX3_print.php?genpage=genpage/Report201412/A11220141226ALLBUT0999_1.php&type=csv"就可以下載12/26的csv

不過今天(12/27)的csv已經不能再用這方式下載了
有人知道要如何下載嗎?

謝謝

發表於 14-12-27 23:07 | 顯示全部樓層
證交所非常小氣耶

很明顯的連這個都要給你添加個小麻煩

發表於 14-12-27 23:25 | 顯示全部樓層
本帖最後由 chwqk 於 14-12-27 23:30 編輯

我也在期待.........
我是用excel vba的

這些處理大眾資訊的人都在想什麼阿..............
今年 年終獎金應該不錯巴 !!!!!!

資料不讓你用 卻一直希望衝高股市交易量.........等獎金


 樓主| 發表於 14-12-28 00:02 | 顯示全部樓層
今年證交所不知道在幹嘛
一直改來改去

評分

參與人數 1金錢 +2 收起 理由
棒的 + 2 好像很多人在問這鍋,感謝的啦!!.

查看全部評分

發表於 14-12-28 08:50 | 顯示全部樓層
用Post方式傳資料即可
form.gif



深入 Python 3》第十四章中14.6 HTTP GET之外有解釋Post傳資料的方式

補充一下上圖
會用得到的參數有
download, qdate, selectType
如果要直接下載csv檔,download值設為 "csv"
selectType就是分類項目,如果要選「全部(不含權證、牛熊證、可展延牛熊證)」,值是"ALLBUT0999"
再補張圖,若需要選其它項目就查一下HTML原始碼即可
selectType.gif


其實改成現在的版本是比以前的做法有效率的多
譬如現在的版本如果要連續下載多日 CSV 格式「全部」資料,只要改一下日期,按「下載CSV」即可,不需再重新調整「分類項目」,在程序與流量上省很多
不過若要連續抓資料時,還是建議讓程式在每筆下載之間做個暫停,避免造成服務器端大量負荷

CSV格式也稍有調整哦

話說自己這兩日也為這東西搞了老半天,因為一時不察,沒注意到用Post,還一直在試Get,還奇怪為何參數正確,為何網頁會Refresh而不是傳回預期中的資料

評分

參與人數 3金錢 +5 收起 理由
ys_chang + 2 按一個讚
Acer2266 + 1 太強了
randloop + 2 感謝分享

查看全部評分

 樓主| 發表於 14-12-28 09:06 | 顯示全部樓層
本帖最後由 MorganLiu 於 14-12-28 09:08 編輯

po一下我的做法
import csv
import string
import codecs
import urllib.parse
import urllib.request
import configparser
import os
import datetime
import shutil
url="http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php"
values = {'download' : 'csv',
          'qdate' : '103/12/26',
          'selectType' : 'ALLBUT0999' }

data = urllib.parse.urlencode(values)
req= urllib.request.Request(url, data.encode('utf-8'))
response = urllib.request.urlopen(req)

file1=open("Z:\\qq","w")
for line in response.read().decode('CP950'):
    if len(line)>0:
        file1.writelines(line)
file1.close()

這個code可以下載csv
不過要自己做迴圈
同時謝謝S大的分享

評分

參與人數 2金錢 +4 收起 理由
photonist + 2 感謝分享
randloop + 2 感謝分享

查看全部評分

發表於 14-12-28 10:05 | 顯示全部樓層
Sirius 發表於 14-12-28 08:50
用Post方式傳資料即可

S大大 請問您第一張圖的資訊是用什麼工具的取得的?
是否方便分享?
發表於 14-12-28 10:34 | 顯示全部樓層
randloop 發表於 14-12-28 10:05
S大大 請問您第一張圖的資訊是用什麼工具的取得的?
是否方便分享?

Firefox有個附加元件叫「Web Developer Toolbar」
裝好後,在「Forms」-->「View Form Information」就可以看到了

WDT實在太方便了,不過會佔一排工具列的空間,所以平常我都把它隱藏,必要時才把傢伙掏出來用

評分

參與人數 1金錢 +2 收起 理由
randloop + 2 感謝分享

查看全部評分

發表於 14-12-28 11:09 | 顯示全部樓層
我也提供一下我依上述教學網頁做的簡單測試用程式,不過要安裝httplib2

安裝httplib2的方法,在命令列下用 pip 安裝即可
  1. pip install -U httplib2
複製代碼

程式腳本:
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-

  3. from urllib.parse import urlencode
  4. import httplib2

  5. url = 'http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php'
  6. data = {'download': 'csv', 'qdate': '103/12/23', 'selectType': 'ALLBUT0999'}
  7. agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0'

  8. httplib2.debuglevel = 1
  9. conn = httplib2.Http('.cache')
  10. headers = {'Content-type': 'application/x-www-form-urlencoded',
  11.            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  12.            'User-Agent': agent}
  13. resp, content = conn.request(url, 'POST', urlencode(data), headers)

  14. print(resp.status, resp.reason)
  15. print(content.decode('cp950'))
複製代碼


因為是測試用的程式,要看執行過程中的訊息,所以用print而沒寫存檔
若要存檔只要把最後2行print改成像這樣即可:
  1. with open('your_file_name.csv', 'wb') as f:
  2.     f.write(content)
複製代碼



headers中的 'Accept'可以不用設。我習慣會改一下User-Agent,假裝一下是一般瀏覽器,原因是服務器會記錄,不改的話,精明的網路管理員可從中知道是程式來抓東西的,這種數量多了,他也許會做些阻擋的措施而造成以後下載較不方便。買賣日報表的圖形驗證就是這類例子。

評分

參與人數 2金錢 +4 收起 理由
heavenweaver + 2 感謝分享
randloop + 2

查看全部評分

發表於 14-12-29 12:24 | 顯示全部樓層
SIRIUS:
若需要選其它項目就查一下HTML原始碼即可
用IE就可以嗎?
還是要用其他程式??
發表於 15-1-13 17:56 | 顯示全部樓層
chwqk 發表於 14-12-29 12:24
SIRIUS:
若需要選其它項目就查一下HTML原始碼即可
用IE就可以嗎?

不好意思,剛剛才看到你的詢問
任何瀏覽器都可以看得到HTML原始碼,只是那個看原始碼的命令選單放的位置會不太一樣
發表於 15-1-20 16:33 | 顯示全部樓層
12月上市櫃的每日查詢日報表又改版  
害我無法一次 用自己設計的VB6  整批下載 !
  變成只好 手動去網站下載上市的部份- 真不爽
改天還得找時間,改寫我的VB6
發表於 15-1-20 22:15 | 顯示全部樓層
SOS.....................
上個月才改版的  XXX
發表於 15-1-22 15:18 | 顯示全部樓層
我選則用下載CSV檔方式處理  
但是:
工作表內A及B欄內之字元有的儲存格最後都會多一個空白
如何用VBA 刪除A、B欄所有儲存格內字元最後有空白 的部份
如:
先選A欄
令其所有字元
" "=""
如何寫阿????
發表於 15-1-22 16:07 | 顯示全部樓層
請問有高手大大.知道VB6要怎麼改寫嗎?之前用 Inet1.OpenURL(StrTemp1, 1)的方法代入網址就可抓到.
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-12-29 06:00

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |