C# Can';无法使用Html敏捷包使用XPATH
我试图通过使用firebug获取XPATH值,从而在Wikipedia上获得“今天的特色文章” 然后将其粘贴到我的代码中:C# Can';无法使用Html敏捷包使用XPATH,c#,.net,xpath,html-agility-pack,C#,.net,Xpath,Html Agility Pack,我试图通过使用firebug获取XPATH值,从而在Wikipedia上获得“今天的特色文章” 然后将其粘贴到我的代码中: string result = wc.DownloadString("http://en.wikipedia.org/wiki/Main_Page"); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(
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。我做错了什么 因为Firebug显示的类似于Firefox的XPath生成了Html,这可能是也可能不是来自服务器的Html。此外,Firebug的路径是绝对的,每一个小小的改变都会打破它 更简单的方法是只查看Html,您要查找的p标记位于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的最好地方是
或者可以使用Linq,不过我觉得XPath更清晰一些
var featuredArticle= doc.DocumentNode.Descendants("div")
.First(n => n.Id == "mp-tfa")
.Descendants("p").FirstOrDefault();
这为我指明了正确的方向,在这个特殊的情况下很有帮助,但是如果我试图刮取一个不总是每个元素都有id的网站呢?我会被迫使用xpath吗?好吧,您可以使用xpath和linq检查您想要获取的元素的每个其他属性。你能发布你想要解析的站点或部分结构吗?这会使帮助变得更容易:)Firebug可能会显示由脚本修改的html,但您正在加载原始服务器html。