VBA HTML标签层次结构

一个简单的问题。 我正在尝试编写一个过程来parsing本网站的HTML

源代码的一部分(行154到174)足以满足一个范例:

<p>(British Aircraft Company)</p> <ul> <li><a href="/wiki/BAC_I" title="BAC I" class="mw-redirect">BAC I</a></li> <li><a href="/wiki/BAC_II" title="BAC II" class="mw-redirect">BAC II</a></li> <li><a href="/wiki/BAC_III" title="BAC III" class="mw-redirect">BAC III</a></li> <li><a href="/wiki/BAC_IV" title="BAC IV" class="mw-redirect">BAC IV</a></li> <li><a href="/wiki/BAC_V" title="BAC V" class="mw-redirect">BAC V</a></li> <li><a href="/wiki/BAC_VI" title="BAC VI" class="mw-redirect">BAC VI</a></li> <li><a href="/wiki/BAC_VII" title="BAC VII" class="mw-redirect">BAC VII</a></li> <li><a href="/wiki/BAC_VII_Mk.2" title="BAC VII Mk.2" class="mw-redirect">BAC VII Mk.2</a></li> <li><a href="/wiki/BAC_VII_Planette" title="BAC VII Planette" class="mw-redirect">BAC VII Planette</a></li> <li><a href="/wiki/BAC_VIII" title="BAC VIII" class="mw-redirect">BAC VIII</a></li> <li><a href="/wiki/BAC_VIII_Bat-Boat" title="BAC VIII Bat-Boat" class="mw-redirect">BAC VIII Bat-Boat</a></li> <li><a href="/wiki/BAC_IX" title="BAC IX" class="mw-redirect">BAC IX</a></li> <li><a href="/wiki/BAC_Cupid" title="BAC Cupid" class="mw-redirect">BAC Cupid</a></li> <li><a href="/wiki/BAC_Drone" title="BAC Drone" class="mw-redirect">BAC Drone</a></li> <li><a href="/wiki/BAC_Super_Drone" title="BAC Super Drone" class="mw-redirect">BAC Super Drone</a></li> <li><a href="/wiki/BA_Swallow_2" title="BA Swallow 2" class="mw-redirect">BA Swallow 2</a></li> <li><a href="/wiki/BA_Eagle_2" title="BA Eagle 2" class="mw-redirect">BA Eagle 2</a></li> <li><a href="/wiki/BA_Double_Eagle" title="BA Double Eagle" class="mw-redirect">BA Double Eagle</a></li> </ul> 

我正在试图devise出一些东西。 所以我可以到达<p> HTML Tag但我不能点击列表项来循环出我想要的,因为它们被进一步包含在<ul></ul> tags 。 你会接下来的步骤是什么?

 Sub ICE() Set Results = IE.document.getElementsByTagName("p") For Each itm In Results If itm.innerHTML = "(British Aircraft Company)" Then End If Next itm End Sub 

为了更加简洁的图片,我的研究阶段是基于由ron提供的hrefparsing的答案

用户Doug Glancy的推荐

– >提到desired results.可能会有所帮助desired results.

我想要的是有能力让VBA在运行时“点击”我的偏好的href,因为它是一个实际的链接。 我正在研究ron上的代码(可以在前面的例子中看到):

 If itm.outerhtml = "BAC VII" Then itm.Click Do Until Not IE.Busy And IE.readyState = 4 DoEvents Loop Exit For End If 

…这里使用了outerHTML,但是我的努力的核心是循环和逻辑运算符


我写了这段代码,但它不起作用

 Set Results = IE.document.getElementsByTagName("p") For Each itm In Results If itm.innerHTML = "(British Aircraft Company)" Then Set Results2 = IE.document.getElementsByTagName("ul") For Each itm2 In Results2 If itm2.innerHTML = "BAC V" Then MsgBox itm2.innerHTML End If Next itm2 End If Next itm 

这将列出与英国飞机公司在p标签下的飞机

 Sub GetAircraft() Dim xHttp As MSXML2.XMLHTTP Dim hDoc As MSHTML.HTMLDocument Dim hUls As MSHTML.IHTMLElementCollection Dim hUl As MSHTML.HTMLListElement Dim hLi As MSHTML.HTMLLIElement Set xHttp = New MSXML2.XMLHTTP xHttp.Open "GET", "http://en.wikipedia.org/wiki/List_of_aircraft_%28B%29" xHttp.send Do DoEvents Loop Until xHttp.readyState = 4 Set hDoc = New HTMLDocument hDoc.body.innerHTML = xHttp.responseText Set hUls = hDoc.getElementsByTagName("ul") 'Go through all the <ul> tags For Each hUl In hUls 'Only if previous tag is something If Not hUl.PreviousSibling Is Nothing Then 'Only if previous tag is <p> If TypeName(hUl.PreviousSibling) = "HTMLParaElement" Then 'Only if previous paragraph is specified text If hUl.PreviousSibling.innerText = "(British Aircraft Company)" Then 'loop through the <li> and print them out For Each hLi In hUl.Children Debug.Print hLi.innerText Next hLi End If End If End If Next hUl End Sub