htmlagilitypack xpath not working
本文关键字:working not xpath htmlagilitypack | 更新日期: 2023-09-27 17:56:58
我有一个问题,我的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
(使用 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"));
<小时 />更新
在西蒙的评论之后,我再次检查了一下,结论是这不是HTML Agility Pack中的错误;id="pnnext"
属性仅在浏览器发出请求时才存在(可能取决于UserAgent标头值)。从代码执行HttpWebRequest
时,"下一步"链接在输出中的显示方式如下:
<a href="/search?q=seo&hl=en&ie=UTF-8&[...]" style="text-align:left">