Board logo

標題: [發問] 證交所資料自動下載 [打印本頁]

作者: lalalada    時間: 2012-7-26 11:54     標題: 證交所資料自動下載

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

問題已解決! 順便修了一下原本貼的程式碼 把太亂無關的部分刪掉方便大家看@@
作者: GBKEE    時間: 2012-7-26 17:54

回復 1# lalalada
請看這裡    http://forum.twbts.com/redirect.php?goto=findpost&pid=41325&ptid=3386
作者: lalalada    時間: 2012-7-26 19:39

本帖最後由 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
作者: mannyhsu    時間: 2012-7-26 20:59

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


CSV 的資料, 確實如版大所言不完整 ...
作者: white5168    時間: 2012-7-26 21:51

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

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

能否建議版主開以個python版,讓一些人可以分享python抓資料的方法
作者: conchih    時間: 2012-7-26 22:46

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

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

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


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

phthon好像很好,明天再來研究研究囉
感謝各位大大
作者: lalalada    時間: 2012-7-26 22:46

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

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


願聞其詳~?
如果有有效率的好方法我會很願意學的:P
作者: white5168    時間: 2012-7-26 23:53

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

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


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

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

回復 3# lalalada


    圖片是依據網頁all_print轉存.html(桌面),後由excel匯入資料所得,但資料格式會移位,但可快速取得....參考看看吧!!
作者: white5168    時間: 2012-7-27 08:15

交易明細指得就是我現在要抓的東西嗎?
是說我用VBA寫上市+上櫃在今天改版之前一小時內可以搞定
其實也 ...
lalalada 發表於 2012-7-27 01:41



    我所指的都是用python寫的,VBA哪有可能這麼快又穩
作者: lalalada    時間: 2012-7-27 09:44

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


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

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

回復 11# chen_cook

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

轉存到桌面??
請教大大是如何轉存的
能否和大家分享一下呢?
作者: mannyhsu    時間: 2012-7-27 11:08

經過多天的測試, 如果要自動化, 就必須預先知道頁數 all_XX , 否則就必須一個一個去查他們的頁數, 再利用程式一個一個導入, 抓下來的資料只要沒有缺損, 格式的修改, 反而是容易的事。

如果用  python 可以解決上面的問題, 也請高手指點一二 ...
作者: white5168    時間: 2012-7-27 11:33

本帖最後由 white5168 於 2012-7-27 11:49 編輯

可以,但是python沒有以上的問題,光是抓資料就很快,可以直接用暴力法就抓到全部的資料,我晚一點再截一張圖給各位看,這是這一兩天抓資料的圖,使用python(主程式加偵錯) + batch file(控制python,防堵錯時,再一次執行的控制)+python寫入CSV檔
作者: lalalada    時間: 2012-7-27 11:36

回復 16# mannyhsu

一個一個去查就沒有自動化的意義了XD
我目前有想到作法
只是還不知道怎麼執行
作者: white5168    時間: 2012-7-27 11:38

本帖最後由 white5168 於 2012-7-27 11:46 編輯
回復  mannyhsu

一個一個去查就沒有自動化的意義了XD
我目前有想到作法
只是還不知道怎麼執行
lalalada 發表於 2012-7-27 11:36



我們要做的是能順利的抓到完整的資料,且能在短時間獲得交易明細,如果你想在這個階段用VBA來提升你的寫程式能力,那是不智之舉,因為現在每天證交所公佈資料的時間是下午5:30,那時候一定很多人都用程式去抓,連線速慢的軟體就常常抓不到資料或是無法下載,這樣的過程各位都遇過,與其用一個很慢工具抓資料,為何不選擇可以先將資料取得後再用VBA去做分析呢?如果連資料都撈不到,怎麼談之後的事呢
作者: mannyhsu    時間: 2012-7-27 11:56

本帖最後由 mannyhsu 於 2012-7-27 11:58 編輯

回復 19# white5168

可否請版大好人做到底, 另開一個主題, 指點大家如何用 python 去抓資料 ~~

另外請問 python 可以搭配 Google Apps Script 及 Google Docs 嗎?
如果可以, 就可以取代目前 Excel + VBA  的作法 ...
作者: white5168    時間: 2012-7-27 12:02

回復  white5168

可否請版大好人做到底, 另開一個主題, 指點大家如何用 python 去抓資料 ~~

另外請問 ...
mannyhsu 發表於 2012-7-27 11:56



我比較請向希望版主或站長開一個有關python的專屬討論區就像excel這樣,讓會寫python的人一起討論,大家一起集氣吧
作者: mannyhsu    時間: 2012-7-27 12:43

回復 21# white5168

http://forum.twbts.com/thread-7267-1-1.html
作者: lalalada    時間: 2012-7-27 15:53

回復 3# lalalada

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

附上一個用python抓的檔案,稍晚5:30後再附上今天用python抓明細的截圖
作者: conchih    時間: 2012-7-27 16:05

本帖最後由 conchih 於 2012-7-27 16:20 編輯

回復 23# lalalada
利用GET
先讀取原始碼
因為我的程式現在正在跑所以就不貼了
這部分跟抓CSV是一樣的 改網址即可
  


可否請大大幫忙
等程式跑完&有空時
貼一下GET那段的網址與程式碼
因為我無法抓到總頁數
非常感謝
作者: white5168    時間: 2012-7-27 21:25

本帖最後由 white5168 於 2012-7-28 00:00 編輯

附上今天用PYTHON跑的圖
作者: usana642    時間: 2012-8-22 20:34

phthon好像很好,有誰可以分享python抓資料的方法?
作者: stu1517    時間: 2012-9-20 23:26

需要此檔來練習一下
作者: seemee    時間: 2013-11-14 22:47

今天終於開始下載資料了
請問誰有之前的資料 可以給我
感激不盡
[email protected]
作者: tristan7002    時間: 2014-1-23 20:19

Python 或 VBA  哪個好用?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)