返回列表 上一主題 發帖

[發問]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!!

本帖最後由 Hsieh 於 2012-3-2 09:46 編輯

回復 1# chen_cook

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate URL
        Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
        For Each n In .Document.getelementsbytagname("INPUT") '這個迴圈找到按鈕是第幾個輸入項
           kn = n.Value
           If kn = "查詢" Then Exit For
           s = s + 1
        Next
        .Document.all("input_stock_code").Value = 6121 '要查的代碼
        .Document.getelementsbytagname("INPUT")(s).Click    '<=====巨集執行到此就錯誤,請問這一行是為何意,找了很久查不出是何意
        Application.Wait Now + TimeValue("00:00:02") '等待2秒更新資料
        Set tmp = .Document.getelementsbytagname("table")(79) '<==== (79)又是何意??79就表示第80個表格
此網頁擷取請測試
  1. Sub Macro1()
  2.     Dim i As Integer, j As Integer, k As Integer
  3. URL$ = "http://www.gretai.org.tw/ch/stock/statistics/monthly/st42.php"
  4.     With CreateObject("InternetExplorer.Application")
  5.         .Visible = True
  6.         .Navigate URL
  7.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  8.         For Each n In .Document.getelementsbytagname("INPUT") '這個迴圈找到按鈕是第幾個輸入項
  9.            kn = n.Value
  10.            If kn = "查詢" Then Exit For
  11.            s = s + 1
  12.         Next
  13.         .Document.all("input_stock_code").Value = 6121 '要查的代碼
  14.         .Document.getelementsbytagname("INPUT")(s).Click    '按下查詢紐
  15.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  16.         Application.Wait Now + TimeValue("00:00:02") '等待2秒更新資料
  17.         Set tmp = .Document.all("rpt_result").getelementsbytagname("table")(2) '顯示區第3個表格
  18.         k = 1
  19.         Cells(k, 1) = tmp.Rows(0).innertext
  20.         Cells(k, 1).WrapText = False
  21.         For i = 1 To tmp.Rows.Length - 1
  22.             k = k + 1
  23.             For j = 0 To tmp.Rows(i).all.Length - 1
  24.                 Cells(k, j + 1) = tmp.Rows(i).Cells(j).innertext
  25.             Next
  26.         Next
  27.         k = k + 1
  28.         Set tmp = .Document.all("rpt_result").getelementsbytagname("table")(3) '顯示區第4個表格
  29.         For i = 0 To tmp.Rows.Length - 1
  30.             k = k + 1
  31.             For j = 0 To tmp.Rows(i).all.Length - 1
  32.                 Cells(k, j + 1) = tmp.Rows(i).Cells(j).innertext
  33.             Next
  34.             Next
  35.             .Quit
  36.         End With
  37. End Sub
複製代碼
學海無涯_不恥下問

TOP

感謝 Hsieh 大大 協助解決,初步測試抓到了..

          kn = n.Value    <==再請教這行是何意,VBA 保留字嗎??
         其它大概看的懂.....

TOP

回復 3# chen_cook

除了VALUE是屬性外
    kn、n並非保留字,這是變數,你自己可以設置任何有意義的字串取代
學海無涯_不恥下問

TOP

請問大大, 如要查其他股票,應如何修改.TKS!!

TOP

回復 5# tsuneng


    .Document.all("input_stock_code").Value = 6121  <--- stockscode$
     cells(1, 1) = stockcode$

TOP

回復 6# chen_cook

感謝 chen_cook 大大回答, 因是VBA新手在使用上有許多不明白地方, 如方便話可否比照1#,2# 的例子.將CODE 貼上參考. TKS!!!

TOP

如果你不想或不會寫VBA,可以參考這個檔案
一卵三四、驚到嘸代誌

TOP

回復 7# tsuneng


    答案都已回答了!!如果還是想不勞而獲,那就有三線了.:Q

TOP

謝謝回答,我不是想"不勞而獲"而是真的不會,真的想學,才會在這提出問題。(如大大也是4年級話,應該會體諒我們這一階段的人,在電腦的知識是有許多不足之處)...  再次謝謝大大回答.

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題