我陷入了一个我不太了解的主题:尝试使用VBA从网站上抓取数据。我不确定我正在寻找正确的野兔,但这是逃避我的。以下是HTML的摘录。
</table></td>
<td width="23" class="pbrdr"><img src="./images/boc08_line2.jpg" width="9" height="180" hspace="4"></td>
</tr>
</table>
<table width="950" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="15" class="pbrdl"> </td>
<td width="661" height="400" valign="top"><br />
<table width="661" border="0" cellspacing="0" cellpadding="0">
<tr>
我想知道我想要访问哪些表。因此我写了这段代码。
Set Elems = Doc.getElementsByTagName("table")
For Each Tbl In Elems
i = i + 1
通过查看具有不同索引号的Elems(1).innerText
,我发现'Elems'集合中有超过10个元素。其中一些是嵌套的,如上面的HTML代码所示。元素(2)将包括外部和内部“表”,而元素(1)只显示外部。但是一些内部元素是空白的,然后我的循环将在Next Tbl
上以“自动化错误”和Tbl = Nothing
崩溃。我一直在寻找一种方法来计算集合中的元素,以便我可以测试。有这样的方式吗?看来,For ... Each循环调用其成员的顺序与其索引号所表示的顺序不同。
所以,我在Next语句之前添加了On Error Resume Next
。现在循环有时会运行到i = 3,有时会运行到i = 4。 #3是一个空白。它可能看起来像这样: -
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td height="135" valign="top" background="./images/boc08_right4.jpg" class="brd3"> </td>
</tr>
</table>
没有。 4有很多内容。我认为VBA在每次通话时都不会保持相同的顺序。然而这并不重要,因为我想要的表可能在#4之后。
作为计算元素的替代方法,我想到了一种限制循环到外部“表”的方法。 Elems.item(, 1).innerText
似乎与Elems(1).innerText
不同。似乎它们更少,但我既不能证明它们是外部的“表格”,也不知道如何循环它们的集合,或者再次,也许在循环之前计算它们的数量。
当然,解决这个问题只会让我进入下一个问题,这将要求我从任何“表格”中提取标签的集合。但那可能是我的下一个问题。