2014-07-08 5 views
1

나는 imdb 웹 사이트에 대한 그래버를 작성 했으므로 이제 페이지를 구문 분석해야합니다. 나는 HtmlAgilityPack으로 할 것이다.Xpath와 HtmlAgilityPack을 사용하는 노드가 NULL입니다.

예를 들어,이 페이지에서 다운로드 한 : link to IMDb

을 내가로 저장 한 @ "D : \ IMDb.htm"나는 선을 수행해야이 페이지에서 검토의 유용성이 명시되어있다. 2062 명 중 1770 명이 다음의 리뷰가 유용하다고 평가했습니다. 첫 리뷰.

내 코드는 내가는 XPath가 올바른지 희망, 다음,하지만 난 잘못을 이해하지 않기 때문에 내 노드, 당신의 도움을보기 위해 말 (

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; 
} 

희망에 NULL입니다 .. html 변수는 HTML 마크 업이 자기 대신에로드 할 HTML 파일의 경로가 포함되어 있기 때문에

답변

1

현재 StringReader를 사용하지 않아야합니다 :

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; 

E 만약 html에 마크 업이 포함되어 있다면 HAP의 내장 함수 doc.LoadHtml(html)을 사용할 수 있습니다.