2016-01-26 53 views
0

我有下面的代碼,我正在使用從體育網站提取數據。我的問題是,我無法找到這個網站上的彈出窗口的URL - 因此,我不知道如何從這個窗口提取數據。彈出窗口可以通過點擊播放器名稱旁邊的藍色圖標進行訪問,我需要的數據位於彈出窗口的第二個選項卡上。從Internet彈出窗口中提取URL?

Sub Extract_goals() 

Dim url As String, links_count As Integer 
Dim i As Integer, j As Integer, row As Integer 
Dim XMLHTTP As Object, html As Object 
Dim tr_coll As Object, tr As Object 
Dim td_coll As Object, td As Object 

links_count = 40 
For i = 1 To links_count 

    url = "http://fantasy.premierleague.com/stats/elements/?stat_filter=goals_scored&element_filter=0&page=" & i & "" 

    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 
    XMLHTTP.Open "GET", url, False 
    XMLHTTP.send 

    Set html = CreateObject("htmlfile") 
    html.body.innerHTML = XMLHTTP.ResponseText 

    Set tbl = html.getelementsbytagname("Table") 

    Set tr_coll = tbl(0).getelementsbytagname("TR") 

    For Each tr In tr_coll 
     j = 1 
     Set td_col = tr.getelementsbytagname("TD") 

     For Each td In td_col 
      Cells(row + 1, j).Value = td.innerText 
      j = j + 1 
     Next 
     row = row + 1 
    Next 
Next 
End Sub 

任何與此有關的幫助表示讚賞。

感謝, 沙希德

+0

他們超鏈接每次都會完全改變嗎?如果您手動執行步驟並獲取URL,您是否可以看到某種可以用於宏的模式?或者你是否說,即使手動,你不知道如何獲得網址? – BruceWayne

+0

你點擊的藍色按鈕,如果你右鍵點擊並查看URL,它是一個相對「穩定」的網址?或者它是JavaScript還是什麼?你點擊幻想頁面上的什麼圖標?關於球員的信息? – BruceWayne

+0

@BruceWayne是的,即使手動做,我無法得到的網址。地址欄url不會改變,如果我手動通過excel中的數據提取模塊,url確實會改變,但是當我複製該URL並將其粘貼到瀏覽器中時,彈出窗口不會打開(並且不必說網址也不提取數據)。 –

回答

0

我用不同的方法來得到這個(通過創建Internet Explorer對象),因爲我無法得到它的工作完全使用MSXML2.XMLHTTP對象以相同的方式。

我找到了彈出窗口的URL,但尚未發現如何從該窗口拉取數據。如果我有更多的時間,我會更多地踢球,但也許這會讓你越過駝峯,你可以找出其餘的。

Sub Extract_goals2() 

Dim ie As Object 
Dim doc As Object 

Set ie = CreateObject("InternetExplorer.Application") 

With ie 

    .Visible = True 

    links_count = 40 
    For i = 1 To links_count 

     .navigate "http://fantasy.premierleague.com/stats/elements/?stat_filter=goals_scored&element_filter=0&page=" & i & "" 

     Do 
      DoEvents 
     Loop Until Not .busy Or .readyState <> 4 

     Set doc = .document 

     Dim tbl As Object 
     Set tbl = doc.getelementsbytagname("Table") 

     Dim tr_coll As Object 
     Set tr_coll = tbl(0).getelementsbytagname("TR") 

     For Each tr In tr_coll 
      j = 1 
      Set td_col = tr.getelementsbytagname("TD") 

       For Each td In td_col 

        If j = 2 Then 'only do this on 2nd table column 

         Set td_a = td.getelementsbytagname("a") 
         Debug.Print td_a(o).href 'this will provide the exact URL 
         td_a(o).Click 'this will actually open the pop-up box 

         'my thoughts were then to work with the elements in this URL to extract what you need 

        Else 

         Cells(row + 1, j).Value = td.innerText 

        End If 

        j = j + 1 

       Next 

       row = row + 1 

     Next 

    Next 

End With 

End Sub