htmlagilitypack xpath not working



我有一个问题,我的xpath不起作用。

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

但是我无法使用 Xpath 访问网址。

请帮助我纠正我的 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 );
}

奇怪的是,不知何故,HtmlAgilityPack无法识别"下一个"链接的id属性。

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

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

  • 查找包含分页元素的表(带有 id="nav" 的表)。对于此元素,ID 被正确识别
  • 取表中的第一个(也是唯一tr)和它的最后一td(使用 XPath last() 函数)
  • 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"));
<小时 />

更新

在西蒙的评论之后,我再次检查了一下,结论是这不是HTML Agility Pack中的错误;id="pnnext"属性仅在浏览器发出请求时才存在(可能取决于UserAgent标头值)。从代码执行HttpWebRequest时,"下一步"链接在输出中的显示方式如下:

<a href="/search?q=seo&amp;hl=en&amp;ie=UTF-8&amp[...]" style="text-align:left">

最新更新