2012-12-03 58 views
1

我使用Excel VBA下載某些網站的網頁源代碼通過以下方式訪問網頁:MSXML2.XMLHTTP產生不同的結果,如果我只是在web瀏覽器

Public Function GetPage(URL As String) As String 
     Dim oX As New MSXML2.XMLHTTP 
     oX.Open "Get", URL, False 
     oX.Send 
     GetPage = oX.responseText 
    End Function 

然而,經過仔細檢查我注意到,此代碼返回的HTML源與我通過Web瀏覽器訪問網站時返回的HTML源不同。

This is the website I'm visiting。在頁面的底部,它列出了兩個結果。現在,如果我使用GetPage函數訪問該URL,它將返回主頁面的HTML,但它不包含任何結果 - 源代碼明確指出「找到0個結果」。是什麼賦予了?它似乎沒有使用JavaScript來替換某些HTML元素,所以我不知所措。我注意到,當我自己訪問網站時,速度很慢,但是當我運行VBA HTTP請求時,它似乎幾乎是瞬間的。也許我必須等待一些東西?

有誰知道爲什麼如果我不通過VBA的HTTP請求,我找不到這些結果?

+1

當我用你的代碼中,我得到一個錯誤頁面返回的抱怨**列「結果」不存在**不知道爲什麼的錯誤和完全相同的網址在瀏覽器的工作原理。 –

+0

我的答案似乎已經與蒂姆的評論交叉了。它看起來像由neubus.com網站解析的糟糕的URL,因爲在URI的查詢部分之後,片段完全合法。從RFC 3986:「通用URI語法由稱爲方案,授權,路徑,查詢和 片段 分量的層次序列的」和他們給出的例子之一是'富://示例.com:8042 /上/那裏名稱=深挖#nose' – barrowc

+0

這也有可能是'XMLHTTP'對象編碼''#字符和造成網址變得破損 – barrowc

回答

4

嘗試從URL的末尾去除片段標識符#results。雖然這是一個URL完全是合法的,它似乎在這裏產生一個問題,因爲我看到這的反應:

ERROR: column "results" does not exist 
LINE 1: ... = 'O') AND (parent_part_info IS NULL))) LIMIT 10#results OF... 

當我運行沒有#results部分的URL,響應一對夫婦的後回來在訪問瀏覽器中的URL時顯示相同的2個結果的秒數

另外MSXML2.XMLHTTPMSXML2.XMLHTTP30的同義詞 - 即最初來自「Microsoft XML,v3.0」庫的版本。如果您使用的是「Microsoft XML,v6.0」庫,那麼通常建議將引用更改爲MSXML2.XMLHTTP60。見this Microsoft blog post

+0

優秀,這工作!謝謝。 –

相關問題