返回列表 上一主題 發帖

證交所全部上市股票交易明細下載

回復  white5168

G大這裡指令很完整,應該不是頁數回覆問題 (我也測試過這個頁面回覆)
        Do Whil ...
HSIEN6001 發表於 2012-8-4 15:01



    又只看一半的code
        Do While .Busy Or .readyState <> IE_READYSTATE.READYSTATE_COMPLETE
            DoEvents
        Loop
        
        Do
            DoEvents
        Loop Until .document.readyState = "complete"
以上的程式碼要跑完,網頁才算是開完全

TOP

回復  white5168     謝謝你的提醒 指教  
回復  c_c_lai           回復  HSIEN6001  
white5168  的指教 ...
GBKEE 發表於 2012-8-4 15:19
  1. Sub 取得交易明細總頁數()
  2.     Dim myTime
  3.     Dim Retry As Integer
  4.    
  5.     Set IE = CreateObject("InternetExplorer.Application")

  6.     strLink = "http://bsr.twse.com.tw/bshtm/bsMenu.aspx"
  7.    
  8.     Retry = 0
  9.    
  10.     Do
  11.         Do
  12.             Do
  13.                 Do
  14.                     Do
  15.                         網頁開啟完成與否
  16.                         On Error Resume Next
  17.                         Set doc = IE.document
  18.                         On Error GoTo 0
  19.                     Loop While doc Is Nothing
  20.                     Set element = doc.getElementsByName("txtTASKNO")
  21.                  Loop While element.Length = 0
  22.                  element.Item(0).Value = stockid
  23.                  Set element = doc.getElementsByName("btnOK")
  24.             Loop While element.Length = 0
  25.             element.Item(0).Click
  26.             
  27.             Application.Wait Now + TimeValue("00:00:02")
  28.             
  29.             Set element = doc.getElementsByName("sp_ListCount")
  30.             'Set element = doc.getElementsByTagName("span")
  31.         Loop While element.Length = 0
  32.     Pagecount = element.Item(0).innerText
  33.     Retry = Retry + 1
  34.    
  35.     If Retry = 5 Then Exit Do
  36.     Loop While Pagecount = ""  
  37.    
  38.     Set doc = Nothing
  39.     Set element = Nothing
  40.     IE.Quit
  41.     Set IE = Nothing
  42. End Sub
複製代碼
我在這一段code裡作的多重防範,因為未來各位抓資料的時候可能是在尖峰時段,就是大家一起抓資料,會導致遠端伺服器的服務資源大家搶,如果只單單一次性抓總頁數,一定會發生抓不道的時候,所以才要多做幾道手續
再者我也擔心,因為VBA 沒有try...cash的語法,所以除了多家擠到防護,再來就是記錄每一筆抓取的ID,當錯誤發生的時候才有機會可以再重斷點開始抓取,而不是重頭
在抓證交所資料時,時常會被證交所的防火牆強制斷出,需為這個部分多加幾道防護才行,因此這一點請各位務必多多注意

TOP

回復 22# white5168
說的好理道出: 下載錯誤點的原因
多謝發表幫大眾解惑

TOP

回復 20# white5168

O_p 好啦!我自首----->(PS:自首無罪!!Please)

這VBA學習,常遇到很多生字,一直查資料 + 吸收消化不良
常心生退念--->(發懶)
因為大師的編碼方式對我這初學者來說太深奧了!
就看了前面露露長就眼花撩亂---->不知從何查生字
跳過浪過,就自己搞笑囉!派謝捏!

對了!上市代號取得時,少了兩支;比對結果是
3638  F-IML
3673  F-TPK
當然還看不懂大師作品,不會自行除錯

頁數取得時,若改成postdata擷取原始碼的方式比較快?
看著ie刷了好幾次畫面都取不到頁數
反而在此多卡了些時間

目前先測試代號及頁面取得
其他....還沒消化
Sorry!貽笑大方

TOP

執行這個程式抓的資料量大,是否證交所會偵測而中斷下載呢?
funnydisk 發表於 2012-8-4 19:27



證交所其實有在偵測是否有人用程式在抓取資料,這一點可用python回到的結果更明顯清楚的看到,因為每當資料長時間讀取時,證交所的防火牆就會讓同一組IP強制斷開,好讓其他人可以使用,其實各位也可以清楚資料,怎嚜測試呢?就在每天各交易日的下午17:30開始就會有人開始抓取資料,尖峰時段8:30~13:30.再這段時間理,可以自行連結去查詢,就會發現網頁無法正常開啟,而且這樣的狀況會持續到23~23:30慢僈地恢復正常,不過有鑑佣常事抓資料大有人在,他們也在改變政策,目前有聽說將會在9月份多提供付費的CSV檔,大家可以期待

TOP

對VBA有興趣者但沒什呢基礎者可以參考http://forum.twbts.com/viewthread.php?tid=7356&extra=

TOP

回復 28# funnydisk

其實付費機制早就存在
http://dataeshop.twse.com.tw/frontend/cht/index.jsp

只是.....會寫程式抓資料的,如W大
那筆錢,當然會自己省起來囉!

TOP

回復 22# white5168


    猴。。。。。突然意會過來,先前這樣測試
W大這支,光在這裡http://bsr.twse.com.tw/bshtm/bsMenu.aspx?
取不到頁數的時候,要刷個好幾次畫面 (網頁開啟完成與否?)

光是這樣刷的方式,賭死的機率更高
會造成塞車!!!!尖峰時段更會堵住

TOP

回復  white5168


    猴。。。。。突然意會過來,先前這樣測試
W大這支,光在這裡http://bsr.twse.co ...
HSIEN6001 發表於 2012-8-4 21:37


請回第一頁我ㄧ開始PO文的內容,請仔細詳讀功能,文字說明的很清楚會Retry幾次?請再把code讀清楚

TOP

回復 30# white5168


    沒錯呀!測試結果如同你寫的
當網頁開啟有問題時,及遠端證交所伺服器過忙碌時,將會進行Retry直到取得資料
你丟個沒有交易買賣的代號給它,就刷不停了
例如冷門的股票,它的交易量有可能是 " 0 "
就會出現無交易資料,當然就取不到  "頁數"
你說自己程式要刷幾次,你當然比我清楚

我測試時,光看它不斷同一個代號key in 代碼  --->就傻眼了
畫面不斷刷個好幾次,才會跳出回圈  (Do...Loop 也不少)
多刷N次,也代表卡在那裡

塞車原理就是  "我塞住,大家也塞住!"

試試改postdata好一點!
大師!!

TOP

        靜思自在 : 修行要繫緣修心,藉事練心,隨處養心。
返回列表 上一主題