返回列表 上一主題 發帖

[發問]VBA抓取.PHP頁問題??

[發問]VBA抓取.PHP頁問題??

各位先進
              不才在網路上看到一段抓取櫃買.php的資料,原文如下
   
Sub Macro1()
    Dim i As Integer, j As Integer, k As Integer
URL$ = "http://www.gretai.org.tw/ch/stock/statistics/monthly/st42.php"
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate URL
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
        .Document.all("input_stock_code").Value = 6121 '要查的代碼
        .Document.all(1758).Click    <=====巨集執行到此就錯誤,請問這一行是為何意,找了很久查不出是何意
        Application.Wait Now + TimeValue("00:00:02") '等待2秒更新資料
        Set tmp = .Document.getelementsbytagname("table")(79) <==== (79)又是何意??
        k = 1
        Cells(k, 1) = tmp.Rows(0).innertext
        Cells(k, 1).WrapText = False
        For i = 1 To tmp.Rows.Length - 1
            k = k + 1
            For j = 0 To tmp.Rows(i).all.Length - 1
                Cells(k, j + 1) = tmp.Rows(i).Cells(j).innertext
            Next
        Next
        k = k + 1
        Set tmp = .Document.getelementsbytagname("table")(82)<==== (82)又是何意??
        For i = 0 To tmp.Rows.Length - 1
            k = k + 1
            For j = 0 To tmp.Rows(i).all.Length - 1
                Cells(k, j + 1) = tmp.Rows(i).Cells(j).innertext
            Next
       因原網頁就在輸入 6121 就停住了,未能觸發網頁帶出資料,故後續的 table 就無法抓出數據帶入execl,請問先進需如何修改才好..TKS!!

heavenweaver您好,

使用Fiddler工具發現網址有異動,已找到問題了,謝謝您

TOP

heavenweaver您好,

想向您請教,先前版本依照您的指導已可正常使用,但今日操作時,發現excel資料載不下來,是否相關參數要修改呢? 謝謝您。
  1. Private Sub CommandButton4_Click()

  2. '宣告變數
  3.    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
  4.    Dim TMP As Workbook


  5. '清除舊資料
  6.    Range("F66:Z200").Select
  7.    Selection.Clear

  8.    code = Range("A1").Value  '股票代碼
  9.    yy = Range("H4").Value '年度


  10. '將資料先存至c糟
  11.    With WinHttpReq
  12.    .Open "POST", "http://www.gretai.org.tw/ch/stock/statistics/monthly/download_st44.php", False
  13.    .Open "POST", Range("I4").Value, False
  14.    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  15.    .Send "stk_no=" & code & "&yy=" & yy  '傳股票代碼、年度參數
  16.           Set oStream = CreateObject("ADODB.Stream")
  17.           oStream.Open
  18.           oStream.Type = 1
  19.           oStream.Write WinHttpReq.ResponseBody
  20.           oStream.SaveToFile ("C:\" & code & "-M.csv")
  21.           oStream.Close
  22.    End With
  23.    

  24. End Sub
  25.    
複製代碼

TOP

回復 22# gto1208
問題在這裡
'將資料先存至c糟
    With WinHttpReq
    '.Open "POST", "http://www.gretai.org.tw/ch/stock/statistics/monthly/download_st44.php", False
  您將這段指令變成remark,正確如下:
   .Open "POST", "http://www.gretai.org.tw/ch/stock/statistics/monthly/download_st44.php", False
很抱歉,我是小學生,不能下載檔案,是個小屁孩!

TOP

回復 22# gto1208
請參考自行修改。
  1. Sub Macro1()
  2. '
  3. ' Macro1 Macro
  4. ' Lu 在 2003/2/28 錄製的巨集
  5. '
  6. ' 快速鍵: Ctrl+a
  7. '
  8. Dim yy, stock

  9. yy = Application.InputBox(prompt:="請輸入查詢年份(如2013):", Title:="上櫃統計報表 > 個股月成交資訊")
  10. stock = Application.InputBox(prompt:="請輸入股票代碼(如3260):", Title:="上櫃統計報表 > 個股月成交資訊")

  11. If yy = "" Then yy = "2013"
  12. If stock = "" Then stock = "3260"

  13. fileIdx = "C:\MyStock\Test\st44_" & stock & ".csv"

  14. myURL = "http://www.gretai.org.tw/ch/stock/statistics/monthly/download_st44.php"
  15. myPar = "yy=" & yy & "&stk_no=" & stock

  16. Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")

  17. With WinHttpReq
  18.     .Open "POST", myURL, False
  19.     .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  20.     .Send myPar
  21.     myURL = .ResponseBody
  22.     Set oStream = CreateObject("ADODB.Stream")
  23.     oStream.Open
  24.     oStream.Type = 1
  25.     If WinHttpReq.ResponseText = "" Then Exit Sub
  26.     oStream.Write WinHttpReq.ResponseBody
  27.     On Error Resume Next
  28.     Kill fileIdx
  29.     On Error GoTo 0
  30.     oStream.SaveToFile fileIdx
  31.     oStream.Close
  32. End With

  33. End Sub
複製代碼
很抱歉,我是小學生,不能下載檔案,是個小屁孩!

TOP

heavenweaver您好,

我已有複製#12的Sub WrittenByLalalada()來修改
http://www.gretai.org.tw/ch/stock/statstics/monthly/download_st44.php
上列網址有二個參數,已將程式改寫如下,但年度的send條件還是抓取不到(程式碼如下),謝謝您
  1. Private Sub CommandButton1_Click()

  2. '宣告變數
  3. Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
  4. Dim TMP As Workbook

  5. '清除舊資料
  6. Range("A4:Z2000").Select
  7. Selection.Clear

  8. code = Range("A1").Value  '股票代碼
  9. yy = Range("B1").Value  '年度

  10.     '將資料先存至c糟
  11.     With WinHttpReq
  12.     '.Open "POST", "http://www.gretai.org.tw/ch/stock/statistics/monthly/download_st44.php", False
  13.     .Open "POST", Range("C1").Value, False
  14.     .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  15.     .Send ("stk_no=" & code & "yy=" & yy)
  16.            Set oStream = CreateObject("ADODB.Stream")
  17.            oStream.Open
  18.            oStream.Type = 1
  19.            oStream.Write WinHttpReq.ResponseBody
  20.            oStream.SaveToFile ("C:\" & code & ".csv")
  21.            oStream.Close
  22.     End With
  23. End Sub
複製代碼

TOP

回復 19# gto1208
如果您是問#12的Sub WrittenByLalalada(),直接複製到您的巨集去執行,就會跳出一個視窗詢問查詢股票代號,直接輸入就好了。
很抱歉,我是小學生,不能下載檔案,是個小屁孩!

TOP

回復 12# lalalada


感謝您提供的vba code,經測試完全正常又不需要開啟IE網頁,值得觀摩學習!
很抱歉,我是小學生,不能下載檔案,是個小屁孩!

TOP

各位高手您好
http://www.gretai.org.tw/ch/stock/statistics/monthly/st44.php
與上述網站相類,但它輸入時有二個參數,目前找到的參數是"yy",想請教一下如果是有stk_no與yy,下面send的程式該如何修改呢? 謝謝
.Send ("stk_no=" & code)

TOP

瞭解了!!!
非常謝謝K大的圖文解說~
連data code 都解說了~真的非常清楚!!
Nicole

TOP

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