我需要從http://www.siriusxm.com/siriusxmhits1中拉出當前播放的藝術家和歌曲。我可以通過Internet Explorer瀏覽到這個網站,但這需要很長時間,所以我嘗試使用WINHTTP.WinHTTPRequest.5.1
和MSXML2.serverXMLHTTP
,但都沒有提取我正在尋找的特定數據。我覺得我很接近,但是錯過了一些東西。使用來自siriusxm.com的XHR進行網頁掃描
下面是HTML片段:
<div id="on-the-air-content" style="display: block;">
<div class="module-content theme-color-content-bg clearfix">
<div id="onair-pdt" style="display: block;">
<img alt="" src="//www.siriusxm.com/albumart/Live/2000/chainsmokers_58C328AC_t.jpg">
<p class="onair-pdt-artist">Chainsmokers/Coldplay</p>
<p class="onair-pdt-song">Something Just Like This</p>
</div>
...
</div>
...
</div>
這裏是我當前的代碼:
Sub GetData()
Dim getArtist As Object
Dim getSong As Object
Set xmHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.siriusxm.com/siriusxmhits1", False
.send
xmHtml.body.innerHTML = .responseText
End With
Set getArtist = xmHtml.getElementById("onair-pdt").getElementsByTagName("p")(0)
MsgBox (getArtist.innerText)
Set getSong = xmHtml.getElementById("onair-pdt").getElementsByTagName("p")(1)
MsgBox (getSong.innerText)
End Sub
如果我啓動Internet Explorer中,將工作使用下面的代碼,但時間太長了什麼我需要做的:
Sub GetData()
Dim DivID As HTMLObjectElement
Dim getArtist As Variant
Dim getSong As Variant
URL = "http://www.siriusxm.com/siriusxmhits1"
With IExplore
.Navigate URL
.Visible = False
Do While .readyState <> 4: DoEvents: Loop
Set doc = .document
Set DivID = doc.getElementById("onair-pdt")
getArtist = DivID.getElementsByClassName("onair-pdt-artist")(0).innerText
getSong = doc.getElementsByClassName("onair-pdt-song")(0).innerText
End With
End Sub
謝謝omegastripes。我添加了json.bas和所有適當的引用。我有一個問題,行JSON.Parse s,vJSON,sState我得到的錯誤說:「編譯錯誤:錯誤數量的參數或無效的屬性分配」當我去json.bas文件中的解析函數,它看起來就像它只查找一個字符串,在這種情況下是變量s。如果我更改爲「JSON.Parse s」,我可以讓它運行,但sState從未分配一個值,並在接下來的幾行中退出。如果我跳過該語句,嘗試設置vJSON時會出現「類型不匹配」錯誤。謝謝。 – mh2017
@ mh2017我貼的JSON.bas的鏈接是錯誤的,我編輯了答案,請檢查鏈接。 – omegastripes
是的,它做到了。謝謝您的意見。實際上你教了我很多。 – mh2017