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"> Documents</a> <a href="/cgi-bin/viewer?action=view&cik=10795&accession_number=0001193125-13-456802&xbrl_type=v" id="interactiveDataBtn"> 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 (34 Act) Size: 15 MB </td>
<td>2013-11-27</td>
<td nowrap="nowrap"><a href="/cgi-bin/browse-edgar?action=getcompany&filenum=001-04802&owner=exclude&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