C#HTML Agility Pack单选节点返回null

时间:2013-06-08 17:09:55

标签: c# winforms web-scraping html-agility-pack

我使用C#,Windows表单和HTML Agility Pack开发了一个Web scraper。

当网站改变代码并打破它时,我已经完成了所有工作。我知道它经常发生在网络刮刀上,但现在我无法弄清楚如何纠正这个问题。

此时我的刮刀通过多个URL循环并从每个页面中删除数据。

我遇到的问题是它循环的网站模板将随机显示更新的模板,该模板没有与我在程序中定义的相同的HTML类和ID。我想要做的是运行一个简单的if if检查单个节点是否为null,以及它是否为新模板运行一组单独的代码。

我遇到的问题是我的程序在if语句中抛出NullReferenceException。

以下是我用来检查它是否为null的语句:

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;

 if (varitem == null) MessageBox.Show("no titles");

它在定义varitem的第一行抛出异常,甚至不使用if语句。

任何建议都赞赏!

2 个答案:

答案 0 :(得分:1)

尝试以下

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");

SelectSingleNode可以返回null,你也可以更好地检查InnerText是否也不为null或为空

if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
              MessageBox.Show("no titles");

答案 1 :(得分:1)

首先你要检查是否

 doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")

返回null。

如果为空,您将从NullReferenceException

获取null.InnerText