VB.NET HtmlAgilityPack 抓取文本

VB.NET HtmlAgilityPack scraping text

我想使用 HtmlAgilityPack 从 https://steamid.io/ 中抓取内容,具体来说,我想抓取用户“在线状态”的状态。

我可以使用 XPath 正确地抓取我需要的信息,但是..每个用户的配置文件都不同,因为 XPath 的变化很小。

如果用户的个人资料是“私人”的,则 XPath 是

/html/body/div/div[2]/div[2]/section/dl/dd[9]

如果用户配置文件不是“私有的”,则 XPath 是

/html/body/div/div[2]/div[2]/section/dl/dd[9]/span

我怎样才能让 HtmlAgilityPack 检查我想显示哪个 div,因为我可以将自己的配置文件设置为私有和非私有,但显然我需要相应地更改 XPath能够显示状态。

如果我使用包含 /span 的 XPath 并且用户的个人资料是私有的,我会得到 System.NullReferenceException: 'Object reference not set to an instance of an object.'

如果我取消私有配置文件并使用 /span XPath 工作正常并显示我想要的内容。

这是我的全部代码

'Online Status - from steamid.io
        Dim curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
        'Dim curOnline2 = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")

        For Each node In curOnline
            onlinelbl.Text = node.InnerText
            If node.InnerText.ToString().Contains("private") Then
                onlinelbl.ForeColor = Color.Red
                onlinelbl.Text = "Private"
            ElseIf onlinelbl.Text.Contains("away") Then
                onlinelbl.Text = onlinelbl.Text.Replace("away", "Away")
                onlinelbl.ForeColor = Color.Orange
            ElseIf onlinelbl.Text.Contains("online") Then
                onlinelbl.Text = onlinelbl.Text.Replace("online", "Online")
                onlinelbl.ForeColor = Color.Green
            ElseIf onlinelbl.Text.Contains("offline") Then
                onlinelbl.Text = onlinelbl.Text.Replace("offline", "Offline")
                onlinelbl.ForeColor = Color.Red
            End If
        Next
    ```

您可以通过 /span:

简单地查找 XPath 是否存在
    Dim curOnline As HtmlNodeCollection
    curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
    If curOnline Is Nothing Then
        curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")
    End If