Я написал скрипт в vba, используя IE для получения данных с веб-страницы.Данные не хранятся ни в одной таблице, я имел в виду, что нет тега table
, tr
или td
.Тем не менее, они выглядят как в табличном формате.Вы можете увидеть изображение ниже для ясности.
То, что я пробовал до сих пор, может получить данные в одну строку, например:
$4,085
$1,620
$1,435
$35
$1,125
$905
То, как я хочу их получить, выглядит следующим образом:
$4,085 $1,620
$1,435 $35
$1,125 $905
В других языках есть опция для list comprehension
, с помощью которой я могу обработать ее в одной строке кода, но в случае vba я застреваю.
html elements
в пределах которого находятся данные (это просто часть целого):
<ul id="tco_detail_data">
<li>
<ul class="list-title">
<li class="first"> </li>
<li>Year 1</li>
<li>Year 2</li>
<li>Year 3</li>
<li>Year 4</li>
<li>Year 5</li>
<li class="last">5 Yr Total</li>
</ul>
</li>
<hr class="loose-dotted">
<li class="first">
<ul class="first">
<li class="first">Depreciation</li>
<li>$4,085</li>
<li>$1,620</li>
<li>$1,425</li>
<li>$1,263</li>
<li>$1,133</li>
<li class="last">$9,526</li>
</ul>
</li>
</ul>
Данные выглядят так, как на этой странице:

Это то, что я пытался сделать до сих пор:
Sub Get_Information()
Dim IE As New InternetExplorer, HTML As HTMLDocument
Dim post As Object
With IE
.Visible = False
.Navigate "https://www.edmunds.com/ford/escape/2017/cost-to-own/?zip=43215"
While .Busy = True Or .ReadyState < 4: DoEvents: Wend
Set HTML = .Document
End With
Application.Wait Now + TimeValue("00:00:05") 'waiting for the items to be available
For Each post In HTML.getElementById("tco_detail_data").getElementsByTagName("li")
Debug.Print post.innerText
Next post
IE.Quit
End Sub
Ссылка для добавления в библиотеку для выполнения вышеуказанного сценария:
Microsoft Internet Controls
Microsoft HTML Object Library