使用HTML Agility Pack在VB.NET中使用XPath

3
我有以下的VB.NET代码,它运行良好,在消息框中我可以看到具有id属性的元素数量。
Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id]")
 MsgBox(hreftext.Count)

现在的问题是,当我在消息框中使用以下内容时,它会给出“对象引用未设置为对象的实例”的错误,尽管有6个ID为rso的元素。

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id='rso']")
 MsgBox(hreftext.Count)

第二个片段有什么问题吗?

2
它应该可以工作。你能给我们原始的HTML代码来检查吗? - Simon Mourier
1
此外,要检查大小写。XPath 是区分大小写的。 - JWiley
2
你知道你可以从Google Chrome复制xpath。只需检查元素,然后右键单击复制xpath,这样至少你就确定了要使用哪个xpath。 - deltu100
2个回答

2

根据您在SO上的另一个问题,似乎您正在尝试爬取Google购物,并忽略了检查下载的HTML源代码,而不是生成的DOM。

在HTML源代码中没有出现"id"rso",这就是为什么您会收到错误信息的原因。 Google不喜欢被爬取,肯定会让它变得困难。

为了理解我的意思,您可以向表单添加一个多行文本框,并添加此内容,而不是当前的xpath代码:

TextBox1.Text = htmldoc.DocumentNode.OuterHtml

漂亮吧!!

1

关于检查案例的详细说明:

请尝试:

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='rso']")
 MsgBox(hreftext.Count)

抓取任何等于'rso'任意大小写组合的节点

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接