Excel VBA:在Excel中输出WinHTTPRequest的结果?
如何在Excel中输出WinHTTPRequest
的结果?
例如,以下代码从网页查询苹果的股票报价,但不输出任何内容:
Sub GetQuotes() Dim XMLHTTP As Object, html As Object, pontod As Object On Error Resume Next Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=AAPL.O", False .send oHtml.body.innerHTML = .responseText End With 'Price Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1) MsgBox pontod.innerText End Sub
虽然这个名字完美运行:
Sub GetQuotes2() Dim XMLHTTP As Object, html As Object, pontod As Object On Error Resume Next Set oHtml = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=AAPL.O", False .send oHtml.body.innerHTML = .responseText End With 'Name Set pontod = oHtml.getElementById("sectionTitle").getElementsByTagName("h1")(0) MsgBox pontod.innerText End Sub
我希望能够获取整个页面,并在其中查找特定的HTML元素,但是如何pipe理查看查询的整个响应?
如上面Jeeped所述, getElementsByClassName
方法在XML请求上不起作用。
但是,通过查看您试图抓取的网页,可以使用以下代码行解决问题:
Set pontod = oHtml.getElementById("headerQuoteContainer").getElementsByTagName("span")(1)
而不是这个:
Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1)
从网页的HTML结构可以看出:
…您的价格不仅是类名为sectionQuote
和nasdaqChange
的第一个div
的第二个span
元素,也是id为headerQuoteContainer
的唯一对象的第二个span
元素。
因此,从那里刮取将避免使用传统的getElementsByClassName
()的无效方法getElementsByClassName
(这是一个有效的HTML方法,但是当HTML是XML响应时getElementById()
。