3

我有一个问题,我的 xpath 无法正常工作。

我正在尝试在底部获取 Google.com 的下一个链接的网址。

但我无法使用 Xpath 访问 url。

请帮我纠正我的xpath。还告诉我应该在什么地方??

HtmlWeb hw = new HtmlWeb();

HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=seo");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id='pnnext']");

foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.Attributes["href"];
    MessageBox.Show(link.Value );
}
4

1 回答 1

4

这里奇怪的是,不知何故 HtmlAgilityPack 无法识别id“Next”链接的属性。

这可能是 HtmlAgilityPack 中的一个错误;您可以将其发布在HAP 问题跟踪器中。

但是,与此同时,我发现了这种解决方法:

  • 找到包含分页元素的表(带有 的表id="nav")。对于这个元素,id 被正确识别
  • 取表中的第一个(也是唯一tr的)和最后一个td(使用 XPathlast()函数)
  • 取我们在上一步获得的a里面的元素。td

长话短说,代码如下:

var doc = new HtmlWeb().Load("http://www.google.com/search?q=seo");

var nextLink = doc.DocumentNode
    .SelectSingleNode("//table[@id='nav']/tr/td[last()]/a");

Console.WriteLine(nextLink.GetAttribute("href", "err"));

更新

在 Simon 的评论之后,我再次检查了这个,结论是这不是 HTML Agility Pack 中的错误;该id="pnnext"属性仅在浏览器发出请求时出现(可能取决于UserAgent标头值)。在执行HttpWebRequestfrom 代码时,输​​出中的“Next”链接如下所示:

<a href="/search?q=seo&amp;hl=en&amp;ie=UTF-8&amp[...]" style="text-align:left">
于 2013-01-31T21:54:33.660 回答