C# //div[@id='resultStats']错误
我想以div的形式获取google结果,但我将error Object reference设置为未设置为对象实例 我的代码:C# //div[@id='resultStats']错误,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,我想以div的形式获取google结果,但我将error Object reference设置为未设置为对象实例 我的代码: var doc = new HtmlWeb().Load("http://www.google.com/search?q=love"); var div = doc.DocumentNode.SelectSingleNode("//div[@id='resultStats']"); var text = div.InnerHtml.ToString();
var doc = new HtmlWeb().Load("http://www.google.com/search?q=love");
var div = doc.DocumentNode.SelectSingleNode("//div[@id='resultStats']");
var text = div.InnerHtml.ToString(); <--- this line
textBox1.Text = div.ToString();
var matches = Regex.Matches(text, @"About ([0-9,]+) ");
var total = matches[0].Groups[1].Value;
我在留言框里看到了97
但我尝试了以下代码:
int counter = 0;
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
counter = counter + 1;
}
MessageBox.Show(counter.ToString());
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
MessageBox.Show(link.ToString());
}
我在messagebox中看到了HtmlAgiliytPack.HtmlNode 97次。第一个错误是因为加载的HTML不包含id='resultStats'的元素。这就是div变量为null的原因,因此div.InnerHtml会给您一个NullReferenceException 至于第二个问题:通过使用link.ToString,您可以调用HtmlNode类型的变量的.ToString方法,该方法似乎没有重载,并且只返回一个简短的类型名。我怀疑您希望输出链接节点本身。为此,只需在链接上使用.OuterHtml属性:
MessageBox.Show(link.OuterHtml);
附带说明:HtmlNode.InnerHtml属性是一种字符串类型,因此在这里不需要对一种字符串类型调用ToString方法。也许ToString不是您要寻找的方法。请在调试器中逐步检查代码,并查看div和link包含的内容。提示:它们不是字符串。谢谢您的回复。我理解。但我想知道在谷歌搜索结果页面上获取resultsstats div???