Ich habe ein Problem, dass mein XPath nicht funktioniert.
Ich versuche, die URL des nächsten Links von Google.com unten zu finden.
Aber ich kann nicht auf URL mit Xpath erreichen.
Bitte hilf mir meinen Xpath zu korrigieren. Sag mir auch, was an der Stelle sein sollte ??
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 );
}
Das Seltsame hier ist, dass HtmlAgilityPack irgendwie das id
Attribut des "Next" -Links nicht erkennt.
Dies könnte ein Fehler in HtmlAgilityPack sein; Sie können es im HAP Issue Tracker veröffentlichen .
In der Zwischenzeit habe ich diese Problemumgehung gefunden:
id="nav"
). Für dieses Element wird die ID korrekt erkannt tr
) in der Tabelle und die letzte td
davon (mit der XPath last()
Funktion) a
Element in der td
wir im vorherigen Schritt erhalten haben. Lange Rede, kurzer Sinn, hier ist der Code:
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"));
Nach Simons Kommentar habe ich das nochmal überprüft und die Schlussfolgerung ist, dass dies kein Bug im HTML Agility Pack ist; Das Attribut id="pnnext"
ist nur vorhanden, wenn die Anforderung von einem Browser gestellt wird (möglicherweise abhängig vom Wert des UserAgent- Headers). Wenn Sie einen HttpWebRequest
vom Code ausführen, wird der Link "Next" in der Ausgabe angezeigt:
<a href="/search?q=seo&hl=en&ie=UTF-8&[...]" style="text-align:left">