使用 table 标签从网络 table 获取数据
Get data from a web table with table tag
我在 HTML 中有此代码:
<table cellspacing = "0" cellpadding = "0" width = "100%" border="0">
<td class="TOlinha2"><span id="Co">140200586125</span>
我已经有一个 VBA 功能可以访问网站、登录并转到正确的页面。现在我正在尝试在 HTML 中的 table 中使用 td
标签。我想要的值是 140200586125
,但我想要很多 td
标签,所以我打算使用 for 循环来获取那些 td
并将它们放在工作表中。
我都试过了:
.document.getElementByClass()
和:
.document.getElementyById()
但都没有用。
感谢您的帮助。我来自巴西,对于任何英文错误,我们深表歉意。
既然您提到您需要检索多个 <td>
标签,那么检索整个集合比使用 getElementById()
一次获取一个标签更有意义。
根据上面的 HTML,这会将 <td>
中的所有 <span>
节点与 class='TOlinha2'
:
匹配
Dim node, nodeList
Set nodeList = ie.document.querySelectorAll("td.TOlinha2 > span")
For Each node In nodeList
MsgBox node.innerText ' This should return the text within the <span>
Next
没有足够的 HTML 来确定 TOlinha2
是否是感兴趣的 table 中所有 tds 的一致 class 名称;并且仅限于此table。如果是,那么您确实可以使用 .querySelectorAll
您可以使用 CSS selector:
ie.document.querySelectorAll(".TOlinha2")
其中 "."
代表 class姓名。
您不能 使用 For Each Loop
迭代返回的 NodeList。请参阅我的问题 。 Excel 会崩溃,您将丢失所有未保存的数据。
你必须循环 nodeList 的长度,例如
Dim i As Long
For i = 0 To Len(nodeList) -1
Debug.Print nodeList(i).innerText
Next i
有时您需要不同的语法,即:
Debug.Print nodeList.Item(i).innerText
您可以尝试使用更多符合条件的元素进一步缩小此 CSS 选择器的范围,例如,该元素必须在 tbody 内,即 table
,并且前面有 tr
( table 行)并有 classname .TOLinha2
ie.document.querySelectorAll("tbody tr .TOlinha2")
我在 HTML 中有此代码:
<table cellspacing = "0" cellpadding = "0" width = "100%" border="0">
<td class="TOlinha2"><span id="Co">140200586125</span>
我已经有一个 VBA 功能可以访问网站、登录并转到正确的页面。现在我正在尝试在 HTML 中的 table 中使用 td
标签。我想要的值是 140200586125
,但我想要很多 td
标签,所以我打算使用 for 循环来获取那些 td
并将它们放在工作表中。
我都试过了:
.document.getElementByClass()
和:
.document.getElementyById()
但都没有用。
感谢您的帮助。我来自巴西,对于任何英文错误,我们深表歉意。
既然您提到您需要检索多个 <td>
标签,那么检索整个集合比使用 getElementById()
一次获取一个标签更有意义。
根据上面的 HTML,这会将 <td>
中的所有 <span>
节点与 class='TOlinha2'
:
Dim node, nodeList
Set nodeList = ie.document.querySelectorAll("td.TOlinha2 > span")
For Each node In nodeList
MsgBox node.innerText ' This should return the text within the <span>
Next
没有足够的 HTML 来确定 TOlinha2
是否是感兴趣的 table 中所有 tds 的一致 class 名称;并且仅限于此table。如果是,那么您确实可以使用 .querySelectorAll
您可以使用 CSS selector:
ie.document.querySelectorAll(".TOlinha2")
其中 "."
代表 class姓名。
您不能 使用 For Each Loop
迭代返回的 NodeList。请参阅我的问题
你必须循环 nodeList 的长度,例如
Dim i As Long
For i = 0 To Len(nodeList) -1
Debug.Print nodeList(i).innerText
Next i
有时您需要不同的语法,即:
Debug.Print nodeList.Item(i).innerText
您可以尝试使用更多符合条件的元素进一步缩小此 CSS 选择器的范围,例如,该元素必须在 tbody 内,即 table
,并且前面有 tr
( table 行)并有 classname .TOLinha2
ie.document.querySelectorAll("tbody tr .TOlinha2")