1

我正在尝试通过使用 firebug 获取 XPATH 值来抓取 Wikipedia 上的“今日精选文章”。

在此处输入图像描述

然后将其粘贴到我的代码中:

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。我究竟做错了什么?

4

1 回答 1

2

因为 Firebug 显示像 Firefox 这样的 XPath 制作了 Html,所以这可能是也可能不是来自服务器的 Html。此外,Firebug 的路径是绝对的,每一个微小的变化都可能打破它。

更简单的方法是只查看 Html,您要查找的 p-Tag 位于带有 id 的 div 中mp-tfa,因此更容易让 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();
于 2012-08-08T20:05:39.817 回答