1

我有一个使用 C#、windows 窗体和 HTML Agility Pack 开发的网络爬虫。

当网站更改它的代码并破坏它时,我的一切都很好。我知道它经常发生在网络抓取工具上,但现在我无法弄清楚如何纠正这个问题。

此时,我的抓取工具循环通过多个 URL 并从每个页面中抓取数据。

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

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

这是我用来检查它是否为空的语句:

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

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

它在定义变量的第一行抛出异常,甚至没有进入 if 语句。

任何建议表示赞赏!

4

2 回答 2

1

首先你应该检查是否

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

返回空值。

如果它为空,您将获得NullReferenceException fromnull.InnerText

于 2013-06-08T17:34:11.453 回答
1

试试下面

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

SelectSingleNode可以返回 null 并且您最好检查是否InnerText也不是 null 或为空

if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
              MessageBox.Show("no titles");
于 2013-06-08T17:22:13.730 回答