Board logo

標題: [發問] 上市個股日成交資訊下載改版建議 [打印本頁]

作者: prin.huang    時間: 2017-5-23 21:46     標題: 上市個股日成交資訊下載改版建議

原先參考站上資料使用msxml2.xmlhttp寫了下載上市股票日成交資訊的巨集,沒想到才用兩天,今天突然不能使用了,原來TWSE又改版了,查了半天msxml2.xmlhttp好像沒辦法抓動態產生的表格資料,想修改巨集,卻不知該用什麼方式,不知是否有建議的工具?
附上原先的巨集供參[attach]27216[/attach]考
作者: joey0415    時間: 2017-5-24 11:25

回復 1# prin.huang

http://www.tse.com.tw/exchangeReport/MI_INDEX?response=json&date=20170523&type=ALLBUT0999
http://www.tse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170522&type=MS

改為json格式,或是下載csv檔,原本的網頁下載也行
作者: f3202    時間: 2017-5-24 13:15

請問J大如加權股價指數歷史資料
http://www.twse.com.tw/zh/page/trading/indices/MI_5MINS_HIST.html
該如何下載
作者: t8899    時間: 2017-5-24 15:30

http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php
如何用巨集一次下載到工作表 ??
全部(不含權證, 牛熊證.........)
作者: joey0415    時間: 2017-5-24 17:31

回復 3# f3202
  1. Sub 巨集1()
  2. '
  3.     Cells.Clear
  4.     sday = 20170524
  5.     surl = "http://www.twse.com.tw/indicesReport/MI_5MINS_HIST?response=html&date=" & sday
  6.     Range("A1").Select
  7.     With ActiveSheet.QueryTables.Add(Connection:="URL;" & surl, Destination:=Range("$A$1"))
  8.         .Refresh BackgroundQuery:=False
  9.     End With
  10. End Sub
複製代碼
請選「列印 / HTML」那頁錄製

自已錄製看看,刪除不要的,這完成了
作者: joey0415    時間: 2017-5-24 17:36

回復 4# t8899

請選「列印 / HTML」那頁錄製

自已錄製看看,刪除不要的,這完成了
  1. Sub 巨集2()
  2.     Cells.Clear

  3.     With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170524&type=ALLBUT0999", Destination:=Range("$A$1"))
  4.         .Refresh BackgroundQuery:=False
  5.     End With
  6. End Sub
複製代碼

作者: t8899    時間: 2017-5-24 17:59

本帖最後由 t8899 於 2017-5-24 18:29 編輯
回復  t8899

請選「列印 / HTML」那頁錄製

自已錄製看看,刪除不要的,這完成了
joey0415 發表於 2017-5-24 17:36

請教一下
這樣抓下來有4個表,我只要最後一個  ==> 106年05月24日每日收盤行情(全部(不含權證、牛熊證))

    With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.twse.com.tw/exchangeR ... onse=html&date=20170524&type=ALLBUT0999", Destination:=Range("$A$1"))
        .Refresh BackgroundQuery:=False
    End With
日期如何用變數代入(今天) ???
作者: joey0415    時間: 2017-5-24 19:22

回復 7# t8899

這個很基本,前面都有範例了,自己學習
作者: t8899    時間: 2017-5-24 19:26

回復  t8899

這個很基本,前面都有範例了,自己學習
joey0415 發表於 2017-5-24 19:22


用 Format(Date, "yyyyMMDD") ,語法問題,無法直接代入?
作者: t8899    時間: 2017-5-24 20:00

本帖最後由 t8899 於 2017-5-24 20:03 編輯
回復  t8899

這個很基本,前面都有範例了,自己學習
joey0415 發表於 2017-5-24 19:22

OK了,  不過,只下載最後一個表格不會
Sub Macro1()
    Cells.Clear

ddd = "URL;http://www.twse.com.tw/exchangeR ... onse=html&date=" & Format(Date, "yyyyMMDD") & "&type=ALLBUT0999"


    With ActiveSheet.QueryTables.Add(Connection:=ddd, Destination:=Range("$A$1"))
        .Refresh BackgroundQuery:=False
    End Wit


end sub
作者: joey0415    時間: 2017-5-24 20:28

回復 10# t8899
  1. Sub 巨集1()
  2. '
  3.     Cells.Clear
  4.     With ActiveSheet.QueryTables.Add(Connection:= _
  5.         "URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170524&type=ALLBUT0999", Destination:=Range("$A$1"))
  6.         .WebTables = "5"
  7.         .Refresh BackgroundQuery:=False
  8.     End With
  9. End Sub
複製代碼
不是每個網頁都可以 指定表格下載,有的頁面只能全頁下載
[attach]27221[/attach]
作者: prin.huang    時間: 2017-5-24 21:17

本帖最後由 prin.huang 於 2017-5-24 21:24 編輯
改為json格式,或是下載csv檔,原本的網頁下載也行
joey0415 發表於 2017-5-24 11:25


J大,這兩個網址從原先的網頁代碼能看出來嗎?
巨集內還有一段下載個股日成交資訊,還有我也想從櫃買中心下載上櫃資料,
也面臨相同問題


上市個股日成交資訊
http://www.tse.com.tw/zh/page/trading/exchange/STOCK_DAY.html
上櫃每日收盤網址
上櫃個股日成交網址
作者: t8899    時間: 2017-5-24 21:32

回復  t8899 不是每個網頁都可以 指定表格下載,有的頁面只能全頁下載
joey0415 發表於 2017-5-24 20:28


請教這個怎麼抓呢?
http://www.twse.com.tw/zh/page/trading/fund/T86.html
作者: joey0415    時間: 2017-5-24 21:35

http://www.twse.com.tw/fund/T86?response=html&date=20170524&selectType=ALL

網址有了

自己練習看看
作者: joey0415    時間: 2017-5-24 21:38

回復 12# prin.huang

網址有了

自己練習

http://www.tpex.org.tw/web/stock/aftertrading/daily_trading_info/st43_print.php?l=zh-tw&d=106/05&stkno=1258&s=0,asc,0

http://www.tpex.org.tw/web/stock/aftertrading/otc_quotes_no1430/stk_wn1430_print.php?l=zh-tw&d=106/05/24&se=EW&s=0,asc,0
作者: prin.huang    時間: 2017-5-24 21:55

回復 15# joey0415
太感謝了,J大
還有一個網址,能幫忙看看嗎?
http://www.tse.com.tw/zh/page/trading/exchange/STOCK_DAY.html

ps. 若要像您一樣能看得出抓取網址,是要能看懂java嗎?
作者: joey0415    時間: 2017-5-24 21:58

回復 16# prin.huang

http://www.tse.com.tw/exchangeReport/STOCK_DAY?response=html&date=20170524&stockNo=1101
作者: t8899    時間: 2017-5-24 22:12

網址有了

自己練習看看
joey0415 發表於 2017-5-24 21:35


Sub Macro1()
Cells.Clear
ddd = "URL;http://www.twse.com.tw/fund/T86?response=html&date=" & Format(Date, "yyyyMMDD") & "&selectType=ALL"
With ActiveSheet.QueryTables.Add(Connection:=ddd, Destination:=Range("$A$1"))
.Refresh BackgroundQuery:=False
End With
End Sub
作者: jsleee    時間: 2017-5-24 22:17

回復 17# joey0415


    您好,我也很好奇,如何取得該網址?
    能否請 joey先進指點迷津
    感謝

JS
作者: f3202    時間: 2017-5-25 06:39

回復 5# joey0415


  謝謝  J大 已解決
作者: prin.huang    時間: 2017-5-26 10:43

回復 19# jsleee

我找到的方法是網頁上有download html網頁的按鈕,
按下去新開的網頁網址就是了,
硬是看了半天網頁程式碼,才發現原來按一下就有結果了
作者: t8899    時間: 2017-5-26 18:02

網址有了

自己練習看看
joey0415 發表於 2017-5-24 21:35

請教一下,字型跟大小如何控制??
作者: jsleee    時間: 2017-5-30 13:52

回復 21# prin.huang


    了解
    感謝你

JS
作者: t8899    時間: 2017-6-3 19:08

回復  prin.huang

網址有了

自己練習
joey0415 發表於 2017-5-24 21:38


請教下面這個網址這麼抓?
http://www.tse.com.tw/zh/page/trading/fund/BFI82U.html
作者: joey0415    時間: 2017-6-3 20:50

回復 24# t8899
http://www.tse.com.tw/fund/BFI82U?response=html&dayDate=20170601&type=day

自己練習看看
作者: t8899    時間: 2017-6-3 21:17

回復  t8899


自己練習看看
joey0415 發表於 2017-6-3 20:50

感謝指導
作者: jsleee    時間: 2017-6-10 10:59

您好
請問以下這個期貨交易資訊的網頁,若要透過程式碼來抓取不同日期的資料,該如何處理?
再麻煩先進們指點,謝謝
http://www.taifex.com.tw/chinese/3/7_12_1.asp
作者: prin.huang    時間: 2017-6-10 11:45

回復 27# jsleee
自己寫的function給你參考,會回傳一個string陣列
  1. Private Function GetWebTb1(sURL00$, nTT00%, nRR00%, nCC00%, bRd00 As Boolean)
  2. '===sURL00      為擷取網址
  3. '===nTT00       為讀取第幾個Table(從1開始)
  4. '===nRR00       該Table由第幾列開始讀取(從1開始)
  5. '===nCC00       該Table由第幾欄開始讀取(從1開始)
  6. '===bRd00       該資料是否輸出
  7. Dim nR00%, nC00%, sTemp() As String, oXml As Object, oDoc As Object, oE As Object, tt As Date
  8.     Set oXml = CreateObject("MSXML2.XMLHTTP.6.0")
  9.     Set oDoc = CreateObject("HTMLFile")
  10.     bRd00 = True
  11. rSend:
  12.     tt = Now() + TimeValue("0:00:20")
  13.     With oXml
  14.         .Open "Get", sURL00, True
  15.         .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
  16.         .send
  17.         On Error Resume Next
  18.         Do While .ReadyState <> 4 Or .Status <> 200
  19.             DoEvents
  20.             If Now > tt Then GoTo rSend
  21.         Loop
  22.         On Error GoTo 0
  23.         oDoc.write .responseText
  24.     End With
  25.     If oDoc.all.tags("Table")(nTT00 - 1) Is Nothing Then bRd00 = False: GoTo Err1
  26.     Set oE = oDoc.all.tags("Table")(nTT00 - 1)
  27.     With oE
  28.         ReDim sTemp(.Rows.Length - nRR00, .Rows(nRR00 - 1).Cells.Length - nCC00)
  29.         For nR00 = 0 To .Rows.Length - nRR00
  30.             For nC00 = 0 To .Rows(nR00 + nRR00 - 1).Cells.Length - nCC00
  31.                 sTemp(nR00, nC00) = .Rows(nR00 + nRR00 - 1).Cells(nC00 + nCC00 - 1).innerText
  32.             Next nC00
  33.         Next nR00
  34.     End With
  35. Err1:
  36.     GetWebTb1 = sTemp
  37.     oXml.abort
  38.     oDoc.Close
  39.     Set oXml = Nothing
  40.     Set oDoc = Nothing
  41.     Set oE = Nothing
  42. End Function
複製代碼

作者: jsleee    時間: 2017-6-11 07:02

回復 28# prin.huang


    不好意思
    請問 prin.huang 先進
    這個Function 要如何運用?
作者: prin.huang    時間: 2017-6-11 22:49

回復 29# jsleee
假設要抓http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170609&type=MS
這網頁的第一個表,從第二列開始抓
(因程式判斷欄位矩陣宣告靠要抓取的第一列有幾個欄位, 若要從第一列開始抓, 你自己要再改一下)
寫一段程式給function需要的資訊,再把function傳回的資料,輸出到excel活頁表,參考如下
  1. Sub main()
  2. Dim URL$, VV As Boolean, AB() As String

  3. URL = "http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170609&type=MS"
  4. AB = GetWebTb1(URL, 1, 2, 1, VV)
  5. If VV = True Then ActiveSheet.Range("A1:E63") = AB

  6. End Sub

  7. Private Function GetWebTb1(sURL00$, nTT00%, nRR00%, nCC00%, bRd00 As Boolean)
  8. '===sURL00      為擷取網址
  9. '===nTT00       為讀取第幾個Table(從1開始)
  10. '===nRR00       該Table由第幾列開始讀取(從1開始)
  11. '===nCC00       該Table由第幾欄開始讀取(從1開始)
  12. '===bRd00       該資料是否輸出
  13. Dim nR00%, nC00%, sTemp() As String, oXml As Object, oDoc As Object, oE As Object, tt As Date
  14.     Set oXml = CreateObject("MSXML2.XMLHTTP.6.0")
  15.     Set oDoc = CreateObject("HTMLFile")
  16.     bRd00 = True
  17. rSend:
  18.     tt = Now() + TimeValue("0:00:20")
  19.     With oXml
  20.         .Open "Get", sURL00, True
  21.         .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
  22.         .send
  23.         On Error Resume Next
  24.         Do While .ReadyState <> 4 Or .Status <> 200
  25.             DoEvents
  26.             If Now > tt Then GoTo rSend
  27.         Loop
  28.         On Error GoTo 0
  29.         oDoc.write .responseText
  30.     End With
  31.     If oDoc.all.tags("Table")(nTT00 - 1) Is Nothing Then bRd00 = False: GoTo Err1
  32.     Set oE = oDoc.all.tags("Table")(nTT00 - 1)
  33.     With oE
  34.         ReDim sTemp(.Rows.Length - nRR00, .Rows(nRR00 - 1).Cells.Length - nCC00)
  35.         For nR00 = 0 To .Rows.Length - nRR00
  36.             For nC00 = 0 To .Rows(nR00 + nRR00 - 1).Cells.Length - nCC00
  37.                 sTemp(nR00, nC00) = .Rows(nR00 + nRR00 - 1).Cells(nC00 + nCC00 - 1).innerText
  38.             Next nC00
  39.         Next nR00
  40.     End With
  41. Err1:
  42.     GetWebTb1 = sTemp
  43.     oXml.abort
  44.     oDoc.Close
  45.     Set oXml = Nothing
  46.     Set oDoc = Nothing
  47.     Set oE = Nothing
  48. End Function
複製代碼

作者: t8899    時間: 2017-6-22 12:37

回復  t8899
自己練習看看
joey0415 發表於 2017-6-3 20:50


再請教一下面這個
http://www.twse.com.tw/zh/page/trading/exchange/TWT48U.html
  (按照除權除息日期由小到大排序)
作者: joey0415    時間: 2017-6-22 18:29

回復 31# t8899

http://www.twse.com.tw/exchangeReport/TWT48U?response=html
作者: t8899    時間: 2017-6-22 18:36

回復  t8899
joey0415 發表於 2017-6-22 18:29

可以按照日期由小到大排序嗎?
作者: joey0415    時間: 2017-6-22 18:37

回復 33# t8899

都可以自己載入excel

自已錄製一下排序應該很簡單

練習看看
作者: t8899    時間: 2017-6-24 06:06

回復  t8899

都可以自己載入excel

自已錄製一下排序應該很簡單

練習看看
joey0415 發表於 2017-6-22 18:37


請教連接時等4秒如果沒回應就跳出,要如何改??
  Application.ScreenUpdating = False
    Sheets("Sheet5").Select
Cells.ClearContents
ddd = "URL;http://www.twse.com.tw/exchangeReport/TWT48U?response=html"
With ActiveSheet.QueryTables.Add(Connection:=ddd, Destination:=Range("$A$1"))
.WebTables = "1"
.Refresh BackgroundQuery:=False
End With
作者: joey0415    時間: 2017-6-24 08:32

回復 35# t8899

官網的問題,過一陣子就正常




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