2012-08-08 4 views
1

위키 피 디아에서 "방화범을 사용하여 XPATH 값을 가져와"오늘 특집 기사를 긁어 내려고합니다. Html 민첩성 팩을 사용하여 XPATH를 사용할 수 없습니다.

enter image description here

그리고 내 코드에 붙여 :
string result = wc.DownloadString("http://en.wikipedia.org/wiki/Main_Page"); 

      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

      doc.LoadHtml(result); 

      var featuredArticle = doc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[3]/div[4]/table[2]/tbody/tr/td/table/tbody/tr[2]/td/div/p"); 

그러나, featuredArticle는 항상 null를 돌려줍니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

방화 광은 스크립트로 수정 된 html을 표시 할 수 있지만 원래 서버 html을로드하고 있습니다. – Vlad

답변

2

Firebug가 Firefox와 같은 XPath에서 Html로 만든 것을 보여주기 때문에 서버의 HTML이 아닌지도 모릅니다. 또한 Firebug의 경로는 절대적이며 모든 작은 변화로 인해 파기 될 수 있습니다.

더 쉬운 방법은 찾고있는 p 태그가 id mp-tfa 인 div에 있기 때문에 div에 대한 XPath 모양을 만드는 것이 더 쉽고 처음에는 p를 얻는 것이 더 쉽습니다. 내부. 이처럼

:

var wc = new WebClient(); 
var doc = new HtmlDocument(); 
doc.Load(wc.OpenRead("http://en.wikipedia.org/wiki/Main_Page")); 
var featuredArticle = doc.DocumentNode.SelectSingleNode("//div[@id='mp-tfa']/p"); 
Console.WriteLine(featuredArticle.InnerText); 

가장 좋은 곳은 XPath를 사용하는 방법을 배울 수는 w3schools.com입니다.

또는 Linq를 사용할 수도 있지만 XPath는 좀 더 명확하다고 느낍니다.

var featuredArticle= doc.DocumentNode.Descendants("div") 
.First(n => n.Id == "mp-tfa") 
.Descendants("p").FirstOrDefault(); 
+0

이것은 올바른 방향으로 나를 가리켜 주며이 특별한 경우에 도움이됩니다.하지만 모든 요소에 대해 항상 ID가없는 웹 사이트를 긁어 내려고한다면 어떻게 될까요? 내가 xpath를 사용하도록 강요 당하지 않을까? – broke

+0

음, xpath와 linq를 사용하여 얻고 자하는 요소의 다른 모든 속성을 확인할 수 있습니다. 구문 분석 할 사이트 나 구조의 일부를 게시 할 수 있습니까? 그게 좀 도와 쉽게 :) – shriek

관련 문제