我为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;
}
希望看到你的帮助,因为我不明白错误。
答案 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)
。