htmlagilitypack xpath不工作

c# html-agility-pack xpath

我有一個問題,我的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 );
}

一般承認的答案

這里奇怪的是,某種程度上HtmlAgilityPack無法識別“Next”鏈接的id屬性。

這可能是HtmlAgilityPack中的一個錯誤;您可以將其發佈在HAP問題跟踪器中

但是,在此期間我發現了這個解決方法:

  • 找到包含分頁元素的表(具有id="nav"的表)。對於此元素,正確識別id
  • 獲取表中的第一個(也是唯一的tr )和最後一個td (使用XPath last()函數)
  • 獲取我們在上一步獲得的td a元素。

長話短說,這是代碼:

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標頭值)。從代碼執行HttpWebRequest時,這就是“Next”鏈接在輸出中的顯示方式:

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"));



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因