如何使用HtmlAgilityPack解析html的多个节点?

时间:2012-11-09 18:07:39

标签: asp.net-mvc html-parsing html-agility-pack

如果有人可以提供帮助,我会很感激!我正在尝试解析Groupon网站http://www.groupon.com/browse/chicago?category=activities-and-nightlife

的以下页面
  var webGet = new HtmlWeb();
  var deal1 = webGet.Load("http://www.groupon.com/browse/chicago?category=activities-and-nightlife");

我希望获得每笔交易的整个块(即折扣优惠)

 HtmlNodeCollection content_block = deal1.DocumentNode.SelectNodes("//div[@class = 'deal-list-tile grid_5_third']");

然后在每个区块中我想获得标题,公司名称,位置和价格。

foreach(HtmlNode node in content_block)
        {
             string title2 = node.SelectSingleNode("//div[@class = 'deal-title js-permalink']").InnerText;
            string country2 = node.SelectSingleNode("//p[@class = 'merchant-name']").InnerText;
            string location2 = node.SelectSingleNode("//p[@class = 'location']").InnerText;
            string price2 = node.SelectSingleNode("//div[@class = 'price']/span").InnerText;
        }

在这里我感到困惑,我需要将有关交易的所有信息写入 DbSet<Deal> Deals,但即使我尝试将内容显示为ViewBag.Message = title + country + location + price;,我也会收到System.NullReferenceException:对象引用未设置为content_block行中对象的实例。

我做错了什么=( 提前谢谢!

1 个答案:

答案 0 :(得分:0)

问题似乎是当没有找到节点而不是空集合时,selectnodes不返回null或null。所以这意味着你应该将if (content_block != null) {包裹在上面的代码块周围。