나는 방화범을 사용하여 XPATH 값을 얻음으로써 Wikipedia의 "Today 's featured article"을 긁어 내려고 노력하고있다.
그리고 그것을 내 코드에 붙여 넣습니다.
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을 반환합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
파이어 버그가 파이어 폭스와 같은 XPath를 보여줌으로써 Html이 만들어 졌기 때문에 서버의 Html이 아닌지도 모른다. 또한 Firebug의 경로는 절대적이며 모든 작은 변화로 인해 파기 될 수 있습니다.
더 쉬운 방법은 Html을 살펴 보는 것입니다. 찾고있는 p-Tag는 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();