使用Xpath和HtmlAgilityPack,Node为NULL

时间:2014-07-08 09:08:37

标签: c# xpath html-agility-pack xmlnode

我为imdb网站写了一个抓取器,现在我需要解析这些页面。我将使用HtmlAgilityPack来做这件事。

例如,我已下载此页面: link to IMDb

我将其保存为@" D:\ IMDb.htm " 在这个页面中,我需要采用指定评论有用性的行,例如: 2062人中有1770人发现以下评论有用:来自第一次审核。

我的代码是下一个,我希望Xpath是正确的,但我的Node最终是NULL(

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using HtmlAgilityPack;


static void Main(string[] args)
{
    var doc = new HtmlDocument();
    doc.LoadHtml("D:\\IMDb.htm");
    Console.WriteLine("res", GetDescription("D:\\IMDb.htm"));
    Console.ReadLine();
}

public static string GetDescription(string html)
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();           
    doc.OptionFixNestedTags = true; 
    doc.Load(new StringReader(html));
    HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='tn15content']/div[1]/small[1]");
    return node.InnerHtml;
}

希望看到你的帮助,因为我不明白错误。

1 个答案:

答案 0 :(得分:1)

你不应该在这里使用StringReader因为html变量包含要加载的HTML文件的路径而不是自己的HTML标记:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();           
doc.OptionFixNestedTags = true; 
doc.Load(html);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='tn15content']/div[1]/small[1]");
return node.InnerHtml;

即使html包含标记,您也可以使用HAP的内置函数doc.LoadHtml(html)