我正在使用excel和VBA打开一个页面并提取一些信息并将其放入我的数据库中。经过一些研究,我发现打开IE显然需要更多时间,可以使用XmlHTTP来实现。我正在使用XmlHTTP打开另一个question中建议的网页。但是,在使用IE时,我能够浏览div标签。如何在XmlHTTP中完成相同的操作?
如果我使用IE打开页面,我正在做类似下面的操作来浏览多个div元素。
Set openedpage1 = iedoc1.getElementById("profile-experience").getElementsbyClassName("title")
For Each div In openedpage1
---------
但是,使用XmlHttp,我无法在下面执行此操作。
For Each div In html.getElementById("profile-experience").getElementsbyClassName("title")
我收到错误,因为对象不支持此属性或方法。
答案 0 :(得分:0)
请查看我发布的另一个问题的this answer,因为这与您正在寻找的内容相近。总之,您将:
创建Microsoft.xmlHTTP
对象
使用xmlHTTP对象打开您的网址
将响应作为XML加载到DOMDOcument
对象
从那里,您可以从XMLNodes
DOMDocument
,选择元素,属性等
答案 1 :(得分:0)
XMLHttp对象以responseText
中的字符串形式返回页面内容。您需要解析此字符串以查找所需的信息。正则表达式是一种选择,但它会非常麻烦。
This page使用字符串函数(Mid,InStr)从html文本中提取信息。
有可能从已检索的HTML中创建一个DOMDocument(我相信它),但我没有追求这个。
答案 2 :(得分:0)
如上述答案所述,将.responseText
放入HTMLDocument,然后使用该对象,例如。
Option Explicit
Public Sub test()
Dim html As HTMLDocument
Set html = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.someurl.com", False
.send
html.body.innerHTML = .responseText
End With
Dim aNodeList As Object, iItem As Long
Set aNodeList = html.querySelectorAll("#profile-experience.title")
With ActiveSheet
For iItem = 0 To aNodeList.Length - 1
.Cells(iItem + 1, 1) = aNodeList.item(iItem).innerText
'.Cells(iItem + 1, 1) = aNodeList(iItem).innerText '<== or potentially this syntax
Next iItem
End With
End Sub
注意:
我从字面上将您的getElementById("profile-experience").getElementsbyClassName("title")
转换为CSS selector,querySelectorAll("#profile-experience.title")
,所以假设您已正确完成此操作。