gpt4 book ai didi

vba - 无法以表格格式获取数据

转载 作者:行者123 更新时间:2023-12-04 21:20:48 25 4
gpt4 key购买 nike

我使用 IE 在 vba 中编写了一个脚本来从网页获取数据。数据不存储在任何表中,我的意思是没有 table , trtd标签。但是,它们看起来像是表格格式。为了清楚起见,您可以查看下图。

到目前为止我尝试过的可以在一行中获取数据,例如:

$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">&nbsp;</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>

该页面中的数据如下所示:

enter image description here

这是我到目前为止所尝试的:
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

最佳答案

这适用于 CSS 选择器。更新以删除显式等待。

选择器是:

#tco_detail_data > li

哪个是 litco_detail_data 的 ID 内

这看起来像以下使用 CSS 查询的网页示例结果

CSS query

代码:
Option Explicit
Public Sub Get_Information()
Dim IE As New InternetExplorer

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
End With
Dim a As Object, exitTime As Date
exitTime = Now + TimeSerial(0, 0, 5)

Do
DoEvents
On Error Resume Next
Set a = IE.document.querySelectorAll("#tco_detail_data")
On Error GoTo 0
If Now > exitTime Then Exit Do
Loop While a Is Nothing

If a Is Nothing Then Exit Sub

Dim resultsNodeList As Object, i As Long, arr() As String
Set resultsNodeList = HTML.querySelectorAll("#tco_detail_data > li")

With ActiveSheet
For i = 0 To 9
arr = Split(resultsNodeList(i).innerText, Chr$(10))
.Cells(i + 1, 1).Resize(1, UBound(arr) + 1).Value = arr
Next
End With

IE.Quit
End Sub

工作表中的结果

Result

附加信息:

数组部分是因为 resultsNodeList(i).innerText 作为“堆叠字符串”返回 - 即之间有换行符;见下图。我将它们分开,生成一个数组,然后将其写到工作表上。该数组基于 0,因此我必须添加 1 才能正确填充范围。

unsplit strings

关于vba - 无法以表格格式获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com