使用VBA从网站提取数据

时间:2018-01-31 16:04:21

标签: html access-vba

我想提取一个我可以在网站上找到的项目的projectstatus。请参阅下面的示例,了解如何解析html。我想提取文本开始,这是td和/ td之间的文本。请参阅下面的html我的代码。

 <div id="ProjectStatus">
 <tr>
 <th>
 <span id="ProjectStatus_Label1" title="De status van het project">Projectstatus</span>
 </th>
 <td>Start</td>
 </tr>

下面你会找到我目前的代码。这段代码只给我字符串“Projectstatus”,这不是我想要的。如何提取“开始”一词?

Private Sub btnClick()

Dim ieApp As InternetExplorer
Set ieApp = New InternetExplorer
Set ieApp = CreateObject("internetexplorer.application")

With ieApp
 .Navigate "url"
 .Visible = True
End With

Do While ieApp.Busy
    DoEvents
Loop 

Set getStatus = ieApp.Document.getElementById("ProjectStatus_Label1")

strStatus = getStatus.innerText

MsgBox (strStatus) 'gives met the text "Projectstatus, but I need the text "Start"

ieApp.Quit
Set ieApp = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

ProjectStatus_Label1开始实现此目标需要一些DOM导航。

使用以下内容:

Do While ieApp.Busy
    DoEvents
Loop
Set labelSpan = ieApp.Document.getElementById("ProjectStatus_Label1")
Set tableHeader = labelSpan.Parent
Set tableRow = tableHeader.Parent
For Each child In tableRow.Children
    If child.tagName = "TD" 'This is the element you're looking for
         Debug.Print child.innerText
         Exit For
    End If
Next

当然,我强烈建议您修改此代码并使用明确的声明和Option Explicit,但您没有问题,所以我不会在答案中获胜。

此外,我还使用了许多作业(labelSpan,tableHeader)进行演示。您可以使用Set tableRow = ieApp.Document.getElementById("ProjectStatus_Label1").Parent.Parent并删除其他声明。

或者您可以使用代码 - 高尔夫,难以理解的方法,从 ProjectStatus div开始:

Debug.Print ieApp.Document.getElementById("ProjectStatus").GetElementsByTagName("td")(0).innerText