使用 Xpath 和 HtmlAgilityPack 的节点为 NULL
Posted
技术标签:
【中文标题】使用 Xpath 和 HtmlAgilityPack 的节点为 NULL【英文标题】:Node is NULL using Xpath and HtmlAgilityPack 【发布时间】:2014-07-08 09:08:36 【问题描述】:我已经为 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】:你不应该在这里使用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)
。
【讨论】:
以上是关于使用 Xpath 和 HtmlAgilityPack 的节点为 NULL的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Java 使用 XPath 和 Selenium WebDriver 单击 SVG 元素