返回列表 上一主題 發帖

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

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

本帖最後由 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會比查詢快很多
感激不盡!

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

TOP

本帖最後由 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

謝謝你!!
我下午也發現了這個連結 然後用了open方法  
URL = "http://bsr.twse.com.tw/bshtm/bsCon ...
lalalada 發表於 2012-7-26 19:39


CSV 的資料, 確實如版大所言不完整 ...
manny

TOP

本帖最後由 white5168 於 2012-7-26 21:53 編輯

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

能否建議版主開以個python版,讓一些人可以分享python抓資料的方法

TOP

本帖最後由 conchih 於 2012-7-28 12:47 編輯

小弟也遇到這個問題了
請教有沒有大大可以

可以從網頁中找到sp_listcount的值
然後就可以再用下面這個來抓資料


至於.csv我想資料不正確,等到正確再來抓吧

phthon好像很好,明天再來研究研究囉
感謝各位大大

TOP

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

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


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

TOP

之前幾個月抓上市796家與上櫃615家的交易明細最多才花2000多秒,現在證交所月改越難抓,多出2倍的時間約快6000秒約1小時多
都是用python抓的,你可以考慮用python抓會更有效率,所以才會建議版主開ㄧ個python可以分享方法

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

如瀏覽報表過於頻繁,疑似程式抓取行為,將暫停您瀏覽並顯示訊息.....!! 簡易使用說明有提到網頁有限制...
.csv 的資料是因為","分位的關係所造成的位移..右側買賣則是無資料的....
是否有高手可將all_print轉為檔案再將它抓入EXCEL,是比較可行的作法........

TOP

        靜思自在 : 慈悲沒有敵人,智慧不起煩惱。
返回列表 上一主題