Board logo

標題: [發問] 有關交易所融資券餘額資料查詢網頁 [打印本頁]

作者: a68951    時間: 2015-8-14 11:18     標題: 有關交易所融資券餘額資料查詢網頁

可以請教一下交易所融資券餘額資料

原網址為:http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php

取得資料網址為:http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201508/A11220150811_1.php?select2=&chk_date=104/08/11

但12日之後查詢內容為無資料,想請問如何知道新網址為何?
作者: hipper68    時間: 2015-8-14 16:07

有同樣的疑問...
不過我要的只有融資融卷餘額
這兩天發現原來用 excel 抓融資融卷餘額 url 不能用了...

原來的:  (以 2015/8/12為例)
http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201508/A11220150812MS.php?select2=MS&chk_date=104/08/12
可以取得 "信用交易統計"這類的資料 =>就是融資融卷餘額
但這兩天這個url 會找不到 A11220150812MS.php

但是如果將 "MS" 改成 "01" (融資融券彙總(水泥工業)), 也就是
http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201508/A1122015081201.php?select2=MS&chk_date=104/08/12
則可以正確取得水泥類股的資料.

請問各位大大,該用哪種 url 取得 "信用交易統計" 這類的資料..
感謝!!感謝!!
作者: joey0415    時間: 2015-8-14 20:04

回復 1# a68951
此為ie點擊法,秒數請自行修改
日期請自設為變數即可
  1. Sub ex()

  2.     With CreateObject("internetexplorer.application")
  3.         .Visible = True
  4.         .Navigate "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php"
  5.         Do Until .ReadyState = 4
  6.             DoEvents
  7.         Loop
  8.         
  9.         .Document.getElementById("date-field").Value = "104/08/12" '填入
  10.          
  11.         '---------,內建的fireevent 的onchange失效,改用調用js的方法--------
  12.         Set evt = .Document.createEvent("HTMLEvents")
  13.         evt.initEvent "change", True, False
  14.         Set lst = .Document.all("selectType") 'option的name是selectType,但getElementsByName無法處理,要all才行
  15.         lst.selectedIndex = 1
  16.         lst.dispatchEvent evt
  17.    
  18.         .Document.all("query-button").Click


  19.          Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop

  20.         Application.Wait Now + TimeValue("00:00:5")
  21.         Stop
  22.         
  23.         'For Z = 0 To 10
  24.         'MsgBox .Document.getElementsByTagName("table")(Z).innerText
  25.         'Next
  26.             Stop
  27.         Set hTable = .Document.getElementsByTagName("table")(4) '第4個table
  28.         tt = hTable.Rows.Length
  29.         qq = hTable.Rows(2).Cells.Length

  30.             With ActiveSheet
  31.                 For i = 3 To hTable.Rows.Length - 1 '前3個是標題與空白跳過
  32.                     For j = 0 To hTable.Rows(i).Cells.Length - 1
  33.                         .Cells(i - 2, j + 1) = hTable.Rows(i).Cells(j).innerText
  34.                     Next
  35.                 Next
  36.             End With

  37.         .Quit
  38. '        MsgBox "OK"
  39.     End With
  40.    
  41. End Sub
複製代碼

作者: a68951    時間: 2015-8-15 00:08

太感謝了~先收下了~
作者: a68951    時間: 2015-8-15 01:07

不好意思~我跑了一下提供的程式碼,大改理解了,
前面先自動執行網頁執行按鍵為全部table,
接著找出有哪些table,抓第四個table資料,
找出欄列,但第四個table只有一列,沒有欄,
應該是沒搜到的意思,是否表示這方法抓不到table(4)?

還是很感謝,多謝~
作者: joey0415    時間: 2015-8-15 22:01

回復 5# a68951

table 4  其實是第五個,excel 是從0開始

[attach]21721[/attach]

不是沒有欄而是前面的欄位有合併與後面的talbe中的欄位長度不一置

下面是修改過的程式碼
  1. Sub ex()
  2.     Application.ScreenUpdating = False  '停止 更新Sheet時 畫面,加速運算
  3.     Application.DisplayAlerts = False  '停止 刪除Sheet時 預設的警告
  4.     Cells.Clear
  5.     With CreateObject("internetexplorer.application")
  6.         .Visible = True
  7.         .Navigate "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php"
  8.         Do Until .ReadyState = 4
  9.             DoEvents
  10.         Loop
  11.         
  12.         .Document.getElementById("date-field").Value = "104/08/12" '填入
  13.          
  14.         '---------,內建的fireevent 的onchange失效,改用調用js的方法--------
  15.         Set evt = .Document.createEvent("HTMLEvents")
  16.         evt.initEvent "change", True, False
  17.         Set lst = .Document.all("selectType") 'option的name是selectType,但getElementsByName無法處理,要all才行
  18.         lst.selectedIndex = 1
  19.         lst.dispatchEvent evt
  20.    
  21.         .Document.all("query-button").Click


  22.          Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop

  23.         Application.Wait Now + TimeValue("00:00:5")
  24. '        Stop
  25.         
  26.         'For Z = 0 To 10
  27.         'MsgBox .Document.getElementsByTagName("table")(Z).innerText
  28.         'Next
  29.         Set hTable = .Document.getElementsByTagName("table")(4) '第4個table


  30.                 For i = 0 To hTable.Rows.Length - 1 '前3個是標題與空白跳過
  31.                     For j = 0 To hTable.Rows(i).Cells.Length - 1
  32.                         If j = 0 And i > 2 Then

  33.                                 Cells(i + 1, j + 1) = "'" & hTable.Rows(i).Cells(j).innerText

  34.                             Else
  35.                                 Cells(i + 1, j + 1) = hTable.Rows(i).Cells(j).innerText
  36.                         End If
  37.                     Next
  38.                 Next


  39.         .Quit
  40.     End With
  41.    
  42.     Range("A3:B3").Insert Shift:=xlToRight
  43.     Range("A2:B2").Select
  44.     Selection.Cut
  45.     Range("A3").Select
  46.     ActiveSheet.Paste
  47.     Range("E2:F2").Select
  48.     Selection.Cut
  49.     Range("O3").Select
  50.     ActiveSheet.Paste
  51.     Range("A1").Select
  52.     Range("D2:h2").Insert Shift:=xlToRigh
  53.    
  54.         Application.ScreenUpdating = True  '停止 更新Sheet時 畫面,加速運算
  55.         Application.DisplayAlerts = True '停止 刪除Sheet時 預設的警告
  56.    
  57. End Sub
複製代碼

作者: vavashop    時間: 2015-8-20 15:53

Sub AAA()

Sheets("上市").Select
    Range("B1").Select
    Sheets("上市融資餘額").Select
    Cells.Select
    Selection.ClearContents
    Sheets("上市").Select
    Selection.Copy
    Sheets("上市融資餘額").Select
    Range("A1").Select
    ActiveSheet.Paste
   
   
   

  
   Dim y, m, d, param As String ' 宣告 y, m, d, param 為字串變數
    y = Sheets("上市融資餘額").Range("B2") ' 西元年
    m = Format(Sheets("上市融資餘額").Range("B3"), "00") ' 月,使用Format函數強制十位數補0
    d = Format(Sheets("上市融資餘額").Range("B4"), "00") ' 日,使用Format函數強制十位數補0
    param = (y - 1911) & "/" & m & " ' 民國年/月/日"



    Application.ScreenUpdating = False  '停止 更新Sheet時 畫面,加速運算
    Application.DisplayAlerts = False  '停止 刪除Sheet時 預設的警告
    Cells.Clear
    With CreateObject("internetexplorer.application")
        .Visible = True
        .Navigate "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php"
        Do Until .ReadyState = 4
            DoEvents
        Loop
        
        .Document.getElementById("date-field").Value = param '填入
         
        '---------,內建的fireevent 的onchange失效,改用調用js的方法--------
        Set evt = .Document.createEvent("HTMLEvents")
        evt.initEvent "change", True, False
        Set lst = .Document.all("selectType") 'option的name是selectType,但getElementsByName無法處理,要all才行
        lst.selectedIndex = 1
        lst.dispatchEvent evt
   
        .Document.all("query-button").Click


         Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop

        Application.Wait Now + TimeValue("00:00:5")
'        Stop
        
        'For Z = 0 To 10
        'MsgBox .Document.getElementsByTagName("table")(Z).innerText
        'Next
        Set hTable = .Document.getElementsByTagName("table")(4) '第4個table


                For i = 0 To hTable.Rows.Length - 1 '前3個是標題與空白跳過
                    For J = 0 To hTable.Rows(i).Cells.Length - 1
                        If J = 0 And i > 2 Then

                                Cells(i + 1, J + 1) = "'" & hTable.Rows(i).Cells(J).innerText

                            Else
                                Cells(i + 1, J + 1) = hTable.Rows(i).Cells(J).innerText
                        End If
                    Next
                Next


        .Quit
    End With
   
    Range("A3:B3").Insert Shift:=xlToRight
    Range("A2:B2").Select
    Selection.Cut
    Range("A3").Select
    ActiveSheet.Paste
    Range("E2:F2").Select
    Selection.Cut
    Range("O3").Select
    ActiveSheet.Paste
    Range("A1").Select
    Range("D2:h2").Insert Shift:=xlToRigh
   
        Application.ScreenUpdating = True  '停止 更新Sheet時 畫面,加速運算
        Application.DisplayAlerts = True '停止 刪除Sheet時 預設的警告
   
End Sub


大大請問這該怎麼改當天的
感覺我的跑很慢
請幫我忙一下謝謝




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