Здравствуйте, прошу Вашей помощи в пояснении, как происходит процесс парсинга, хочу с сайта достать одну цифру (курс доллара Средний курс) на ежедневной основе. Но как это сделать... даже не могу себе представить.
То что выкладывали макрос который вытягивает по коду валюты курс НБУ РНКБ и т.д, он просто прекрасен, но как оно работает...(Если сможете прокомментировать каждую строчку, огромно спасибо и +5 к Карне) ( Хочу просто понять принцип, как происходит поиск нужного текста в HTML (если я правильно понимаю, что там происходит поиск) Заранее благодарен! П.С. Желательно на живом примере: (Если Эта ссылка будет запрещена по правилам сайта, "прошу понять и простить"(с) ))
Скрытый текст
Макрос который выдает курс валют НБУ на дату, нашел на просторах( Как оно работает ((((
Код
Function NBU_RATE(sCurr$, iiDate As Date)
'moonexcel.com.ua
Dim sURI As String
Dim oHttp As Object
Dim htmlcode As String
Dim C As Range
Dim Q As Long
Dim iP As Long, z As Long
Dim s As String, S1 As String, iOnlyTable As String
Dim b As Object
Dim massive(30, 5)
Dim iDatas As Date
sURI = "http://bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=daily&date=" & iiDate & "&execute"
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
If oHttp Is Nothing Then Exit Function
On Error GoTo ConnectionError
oHttp.Open "GET", sURI, False
On Error GoTo ConnectionError
oHttp.Send
htmlcode = oHttp.responseText
iP = InStr(1, htmlcode, "України<")
htmlcode = Mid(htmlcode, iP, 10000)
iP = InStr(1, htmlcode, "<") + 6 + 11 '">
Dim ss As String
For i = 1 To 10000
ss = Trim(Mid(htmlcode, i, 10))
If Mid(ss, 6, 3) = ".20" And IsDate(ss) Then Exit For
Next i
iDatas = CDate(ss) 'Mid(htmlcode, iP, 10)
iOnlyTable = Mid(htmlcode, InStr(100, htmlcode, "<" & "table cellpadding="), InStr(1000, htmlcode, "<" & "/table>") - _
InStr(100, htmlcode, "<" & "table cellpadding=") + 10) '">
Set Doc = CreateObject("HTMLFile")
Doc.Write iOnlyTable
Set b = Doc.all.tags("TABLE")
For Each uTableElement In b
iRows = uTableElement.Rows.Length
iCells = uTableElement.Cells.Length
j = 0
For k = 1 To iRows
For l = 1 To 5
j = j + 1
massive(k, l) = uTableElement.Cells(j - 1).innerHTML
If j = uTableElement.Cells.Length Then GoTo 1
Next l
Next k
1:
Next uTableElement
For k = 2 To iRows
For l = 1 To 5
If massive(k, l) = sCurr Then
NBU_RATE = Replace(massive(k, 5), ".", ",")
NBU_RATE = NBU_RATE / massive(k, 3)
End If
Next l
Next k
Calculate
NextForLoop:
Set oHttp = Nothing
Exit Function
ConnectionError:
End Function
Спасибо, большое! Я думал так и сделать. У меня только маленькое сомнение было. А структура сайта может поменяться? Или какие нюансы могут возникнуть в таком случае ? И как возможно изменить Connection:=, там нужно дату подставить? Спасибо!