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
我想使用 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
:
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