使用Xpath和HtmlAgilityPack,节点为NULL

本文关键字:节点 NULL HtmlAgilityPack Xpath 使用 | 更新日期: 2023-09-27 18:11:50

我已经为imdb网站写了一个抓取器,现在我需要解析页面。我要用htmllagilitypack

例如,我下载了这个页面:链接到IMDb

我保存它作为@" D: ' IMDb.htm "从这一页,我需要采取的行,其中审查的有用性是指定的,例如1770的2062人发现以下审查有用:从第一次审查。

我的代码是下一个,我希望Xpath是正确的,但我的节点是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;
}

希望能得到你的帮助,因为我不明白是怎么回事。

使用Xpath和HtmlAgilityPack,节点为NULL

您不应该在这里使用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)