返回列表 上一主題 發帖

[發問] 證交所資料自動下載

[發問] 證交所資料自動下載

本帖最後由 lalalada 於 2012-7-27 15:58 編輯

證交所網站竟然改版了ˊˋ 才剛寫好的說
完全沒有新手的好運....
    ActiveSheet.name = sheetname
    webURL = "URL; http://bsr.twse.com.tw/bshtm/bsContent.aspx? StartNumber=2498&FocusIndex=All_21"
    'webURL = "URL; http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx? StartNumber=2498&FocusIndex=All_100"   位址會換!
    With ActiveSheet.QueryTables.Add(Connection:=webURL, Destination:=Range("A1"))
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
    End With
中間有行註解就是第一次改版的見證....''(改網址)
而這次改版後 本來使用 http://bsr.twse.com.tw/bshtm/bsC ... ;FocusIndex=All_100
就可以適用每支股票 只要改代碼就好
但是現在要指定頁數
比如3008的資料共20頁  http://bsr.twse.com.tw/bshtm/bsC ... p;FocusIndex=All_20
則ALL後面輸入1~20都抓得到 超過20則無法讀取
不知道能不能找出網站決定頁數的方法呢?
又 我在網站原始碼 view-source:http://bsr.twse.com.tw/bshtm/bsMenu.aspx  中發現
//    window.open("bshtm/"+ HiddenField_spDate +"/"+ document.getElementById("hidTASKNO").value+"/"+ document.getElementById("hidTASKNO").value+".csv");
window.open("bsContent.aspx?StartNumber=" + document.getElementById("hidTASKNO").value + "&download=csv");
表示有csv檔作為網頁資料源?有沒有辦法抓到呢?
感覺會是比較一勞永逸的做法 且下載csv會比查詢快很多
感激不盡!

問題已解決! 順便修了一下原本貼的程式碼 把太亂無關的部分刪掉方便大家看@@

本帖最後由 lalalada 於 2012-7-27 15:50 編輯
回復  lalalada
請看這裡
GBKEE 發表於 2012-7-26 17:54


回復 2# GBKEE
謝謝你!!:)
我下午也發現了這個連結 然後用了open方法  
URL = "http://bsr.twse.com.tw/bshtm/bsContent.aspx?StartNumber=1101&download=csv"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    With WinHttpReq
    .Open "OPEN", URL, False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .Send
           Set oStream = CreateObject("ADODB.Stream")
           oStream.Open
           oStream.Type = 1
           oStream.Write WinHttpReq.ResponseBody
           oStream.SaveToFile ("C:\TEST\" + bookname + "\" + code + ".csv")
           oStream.Close
    End With
可是發現一個致命的問題
從那個位址下載下來的csv檔資料有遺漏
包括位置沒對齊、失去作半部的賣出資料和右半部的進出資料
所以才想用查詢表 雖然慢可是應該不會錯(會跟網頁上看到一樣)
目前的想法是:
1. 能解決csv檔案錯誤是最好的,又快又方便,可是感覺決定權在證交所...(偷偷問一下有可能是他們動手腳嗎@@?)
2. 利用vba取得網頁原始碼,然後搜尋頁碼的代碼
再次感謝版主的熱心幫助!!:D

TOP

改用暴力法抓檔案,不然每支股票都要這樣抓真的很累,哪天格式又改了就真的欲哭無淚

能否建議版主開以個py ...
white5168 發表於 2012-7-26 21:51


願聞其詳~?
如果有有效率的好方法我會很願意學的:P

TOP

本帖最後由 lalalada 於 2012-7-27 01:43 編輯
之前幾個月抓上市796家與上櫃615家的交易明細最多才花2000多秒,現在證交所月改越難抓,多出2倍的時間約快600 ...
white5168 發表於 2012-7-26 23:53


交易明細指得就是我現在要抓的東西嗎?
是說我用VBA寫上市+上櫃在今天改版之前一小時內可以搞定
其實也只寫好不到一個禮拜就改版了!!
往事如風Q_Q
PYTHON的做法怎麼做可以跟我說嗎?
抓下來之後用excel處理跟vba差不多嗎?
不過還是先以vba為主 畢竟比較熟~

TOP

本帖最後由 lalalada 於 2012-7-27 09:48 編輯
如瀏覽報表過於頻繁,疑似程式抓取行為,將暫停您瀏覽並顯示訊息.....!! 簡易使用說明有提到網頁有限制...
...
chen_cook 發表於 2012-7-27 06:04


我也看了一下csv檔
是資料缺損而不只是位置跑掉(即分隔符號中間的值是空的)
至於"如瀏覽報表過於頻繁,疑似程式抓取行為,將暫停您瀏覽並顯示訊息''
目前沒碰到過 據說如果用迴圈一頁一頁跑的話就會跳出來
不過一頁一頁跑實在太慢了...是我比較不想嘗試的方法

TOP

本帖最後由 lalalada 於 2012-7-27 09:53 編輯

回復 11# chen_cook

Great!!
下載+匯入說不定會比用插入查詢要快
不過我不知道怎麼轉存耶...轉存的時候不會需要指定頁數嗎 All_後面的數字
另外你是用GET方法嗎?

TOP

回復 16# mannyhsu

一個一個去查就沒有自動化的意義了XD
我目前有想到作法
只是還不知道怎麼執行

TOP

回復 3# lalalada

嗯 我成功了
基本上就如一開始假設
利用GET
先讀取原始碼
因為我的程式現在正在跑所以就不貼了
這部分跟抓CSV是一樣的 改網址即可
然後抓出頁碼的部分
剩下的就跟以前一樣@@
不過又更慢了....而且出現中斷現象
期待八月的CSV吧 雖然可能要付費= =
再次感謝大家的熱情討論與指教:)!!

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題