我正试图通过使用firebug获取XPATH值来刮取维基百科上的“今日精选文章”。
然后将其粘贴到我的代码中:
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 :(得分:2)
因为Firebug显示像Firefox这样的XPath制作了Html,这可能是也可能不是服务器的Html。此外,Firebug的路径是绝对的,每一个小小的变化都可以打破它。
更简单的方法是只看Html,你正在寻找的p-Tag位于id为mp-tfa
的div中,所以更容易让XPath找到div而刚刚获得第一个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();