Узел имеет значение NULL с использованием Xpath и HtmlAgilityPack

Я написал граббер для сайта imdb и теперь мне нужно разобрать страницы. Я собираюсь сделать это с помощью HtmlAgilityPack.

Например, я скачал эту страницу: ссылка на 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;
}

Надеюсь увидеть от вас помощь, потому что я не понимаю, что не так..


person TomatoLion    schedule 08.07.2014    source источник


Ответы (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).

person har07    schedule 08.07.2014