Иерархия HTML-тегов VBA

0

Простой вопрос. Я пытаюсь написать процедуру для анализа HTML этого сайта

Часть исходного кода (строки с 154 по 174), достаточная для парадигмы, такова:

<p>(British Aircraft Company)</p>
<ul>
<li><a href="/wiki/B.A.C._I" title="B.A.C. I" class="mw-redirect">B.A.C. I</a></li>
<li><a href="/wiki/B.A.C._II" title="B.A.C. II" class="mw-redirect">B.A.C. II</a></li>
<li><a href="/wiki/B.A.C._III" title="B.A.C. III" class="mw-redirect">B.A.C. III</a></li>
<li><a href="/wiki/B.A.C._IV" title="B.A.C. IV" class="mw-redirect">B.A.C. IV</a></li>
<li><a href="/wiki/B.A.C._V" title="B.A.C. V" class="mw-redirect">B.A.C. V</a></li>
<li><a href="/wiki/B.A.C._VI" title="B.A.C. VI" class="mw-redirect">B.A.C. VI</a></li>
<li><a href="/wiki/B.A.C._VII" title="B.A.C. VII" class="mw-redirect">B.A.C. VII</a></li>
<li><a href="/wiki/B.A.C._VII_Mk.2" title="B.A.C. VII Mk.2" class="mw-redirect">B.A.C. VII Mk.2</a></li>
<li><a href="/wiki/B.A.C._VII_Planette" title="B.A.C. VII Planette" class="mw-redirect">B.A.C. VII Planette</a></li>
<li><a href="/wiki/B.A.C._VIII" title="B.A.C. VIII" class="mw-redirect">B.A.C. VIII</a></li>
<li><a href="/wiki/B.A.C._VIII_Bat-Boat" title="B.A.C. VIII Bat-Boat" class="mw-redirect">B.A.C. VIII Bat-Boat</a></li>
<li><a href="/wiki/B.A.C._IX" title="B.A.C. IX" class="mw-redirect">B.A.C. IX</a></li>
<li><a href="/wiki/B.A.C._Cupid" title="B.A.C. Cupid" class="mw-redirect">B.A.C. Cupid</a></li>
<li><a href="/wiki/B.A.C._Drone" title="B.A.C. Drone" class="mw-redirect">B.A.C. Drone</a></li>
<li><a href="/wiki/B.A.C._Super_Drone" title="B.A.C. Super Drone" class="mw-redirect">B.A.C. Super Drone</a></li>
<li><a href="/wiki/B.A._Swallow_2" title="B.A. Swallow 2" class="mw-redirect">B.A. Swallow 2</a></li>
<li><a href="/wiki/B.A._Eagle_2" title="B.A. Eagle 2" class="mw-redirect">B.A. Eagle 2</a></li>
<li><a href="/wiki/B.A._Double_Eagle" title="B.A. Double Eagle" class="mw-redirect">B.A. Double Eagle</a></li>
</ul>

Я сейчас пытаюсь что-то выстроить. Поэтому я могу попасть в <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

Для более сжатой картины этот этап моего исследования основан на ответе на анализ VBA href, предоставленный ron

Рекомендация пользователем Doug Glancy

→ Возможно, было бы полезно указать desired results.

Я хочу иметь возможность сделать VBA "щелчком" во время выполнения href моих предпочтений, поскольку это фактическая ссылка. Я изучаю код от ron на том, что есть (и можно увидеть в предыдущем примере):

If itm.outerhtml = "B.A.C. VII" Then
        itm.Click

        Do Until Not IE.Busy And IE.readyState = 4
            DoEvents
        Loop
        Exit For
 End If

... здесь используется externalHTML, но ядром моего усилия является цикл и логический оператор


Я написал этот фрагмент кода, однако он не работает

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 = "B.A.C. V" Then
                MsgBox itm2.innerHTML
            End If

        Next itm2
    End If
Next itm
  • 1
    Может быть полезно упомянуть желаемые результаты.
  • 0
    Добавляем сейчас желаемые результаты
Теги:
excel-vba
excel

1 ответ

3
Лучший ответ

Это будет содержать список самолетов под тэгом p с British Aircraft Company

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
  • 0
    WOW просто вопрос, почему вы используете GET вместо POST? это просто поразило меня.
  • 0
    не безопаснее с POST?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню