VBA href Сканирование исходного кода браузера

Я обновил свой вопрос, так как знаю более четко о технической необходимости, которую я пытаюсь решить.

A. Если мы возьмем полученный URL-адрес из поиска на сайте информационного агентства, мы получим это

    https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000010795&type=10-K&dateb=&owner=exclude&count=20

Б. Введя URL-адрес шага A в браузер и перейдя к исходному коду, мы видим в строке № 100 (я использую Google Chrome) эту очаровательную строку, которая также является интерактивной ссылкой:

    href="/Archives/edgar/data/10795/000119312513456802/0001193125-13-456802-index.htm"

строка содержится в следующем фрагменте нашего исходного кода:

    <tr>
<td nowrap="nowrap">10-K</td>
<td nowrap="nowrap"><a href="/Archives/edgar/data/10795/000119312513456802/0001193125-13-456802-index.htm" id="documentsbutton">&nbsp;Documents</a>&nbsp; <a href="/cgi-bin/viewer?action=view&amp;cik=10795&amp;accession_number=0001193125-13-456802&amp;xbrl_type=v" id="interactiveDataBtn">&nbsp;Interactive Data</a></td>
<td class="small" >Annual report [Section 13 and 15(d), not S-K Item 405]<br />Acc-no: 0001193125-13-456802&nbsp;(34 Act)&nbsp; Size: 15 MB            </td>
            <td>2013-11-27</td>
            <td nowrap="nowrap"><a href="/cgi-bin/browse-edgar?action=getcompany&amp;filenum=001-04802&amp;owner=exclude&amp;count=20">001-04802</a><br>131247478         </td>
         </tr>

C. Если щелкнуть строку 100 по ссылке шага A, мы перейдем на следующую страницу, и ссылка шага A теперь станет частью URL! Итак, мы получаем новую страницу, назначенную этому URL:

https://www.sec.gov/Archives/edgar/data/10795/000119312513456802/0001193125-13-456802-index.htm

D. С использованием той же методологии мы встречаем в строке № 182 эту строку кода

href="/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"

если мы нажмем на строку, мы получим к strXMLSite который находится на макросе ниже. Когда вы посмотрите на макрос и запустите его, вы поймете, что это логический вывод, что строка может заполняться нужным URL во время выполнения, если мы сможем интегрировать соответствующую процедуру в наш макрос. Это ядро ​​вопроса.


Мы активировали необходимый для макроса Microsoft XML Core Services (MSXML) (Excel -> VBE -> Инструменты -> Ссылки -> Microsoft XML, v6.0), необходимый для процедуры.

Как мы можем сделать VBA Crawl от URL-адреса, который находится на шаге A, через исходный код до URL-адреса, который сейчас включен strXMLSite Строка путем добавления операторов в процедуру? Нужно ли активировать библиотеку из Сервис -> Ссылки? Можете ли вы показать мне блок кода с использованием такой методологии? Какова линия подхода в этом вопросе?

В целях полноты позвольте мне предоставить макрос вежливости @user2140261

Sub GetNode()
Dim strXMLSite As String
Dim objXMLHTTP As MSXML2.XMLHTTP
Dim objXMLDoc As MSXML2.DOMDocument
Dim objXMLNodexbrl As MSXML2.IXMLDOMNode
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode

Set objXMLHTTP = New MSXML2.XMLHTTP
Set objXMLDoc = New MSXML2.DOMDocument

strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"

objXMLHTTP.Open "POST", strXMLSite, False
objXMLHTTP.send
objXMLDoc.LoadXML (objXMLHTTP.responseText)

Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl")

Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage")

Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text
End Sub

спасибо за просмотр моего вопроса

1 ответ

Решение

Добавьте ссылку на "Microsoft Internet control". Это приведет вас к тому, что вы сможете получить отдельные XML-ссылки.

Sub Tester()

    Dim IE As New InternetExplorer
    Dim els, el, colDocLinks As New Collection
    Dim lnk

    IE.Visible = True
    Loadpage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _
                  "action=getcompany&CIK=0000010795&type=10-K" & _
                  "&dateb=&owner=exclude&count=20"

    'collect all the "Document" links on the page
    Set els = IE.Document.getelementsbytagname("a")
    For Each el In els
        If Trim(el.innerText) = "Documents" Then
            'Debug.Print el.innerText, el.href
            colDocLinks.Add el.href
        End If
    Next el

    'loop through the "document" links and check each page for xml links
    For Each lnk In colDocLinks
        Loadpage IE, CStr(lnk)
        For Each el In IE.Document.getelementsbytagname("a")
            If el.href Like "*.xml" Then
                Debug.Print el.innerText, el.href
                'work with the document from this link
            End If
        Next el
    Next lnk

End Sub

Sub Loadpage(IE As Object, URL As String)
    IE.navigate URL
    Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
End Sub
Другие вопросы по тегам