So extrahieren Sie die vollständige URL mit HtmlAgilityPack - C #

c# extraction html-agility-pack hyperlink

Frage

In Ordnung mit dem Weg unten ist das Extrahieren nur der Verweis-URL wie folgt

der Extraktionscode:

foreach (HtmlNode link in hdDoc.DocumentNode.SelectNodes("//a[@href]"))
{
    lsLinks.Add(link.Attributes["href"].Value.ToString());
}

Der URL-Code

<a href="Login.aspx">Login</a>

Die extrahierte URL

Login.aspx

Aber ich möchte einen echten Link bekommen, wie der Browser geparst hat

http://www.monstermmorpg.com/Login.aspx

Ich kann es tun mit der Überprüfung der URL, ob http enthalten und wenn nicht den Domain-Wert hinzufügen, aber es kann einige Probleme bei einigen Gelegenheiten verursachen, und ich denke, nicht eine sehr kluge Lösung.

c # 4.0, HtmlAgilityPack.1.4.0

Akzeptierte Antwort

Angenommen, Sie haben die ursprüngliche URL, können Sie die geparste URL wie folgt kombinieren:

// The address of the page you crawled
var baseUrl = new Uri("http://example.com/path/to-page/here.aspx");

// root relative
var url = new Uri(baseUrl, "/Login.aspx");
Console.WriteLine (url.AbsoluteUri); // prints 'http://example.com/Logon.aspx'

// relative
url = new Uri(baseUrl, "../foo.aspx?q=1");
Console.WriteLine (url.AbsoluteUri); // prints 'http://example.com/path/foo.aspx?q=1'

// absolute
url = new Uri(baseUrl, "http://stackoverflow.com/questions/7760286/");
Console.WriteLine (url.AbsoluteUri); // prints 'http://stackoverflow.com/questions/7760286/'

// other...
url = new Uri(baseUrl, "javascript:void(0)");
Console.WriteLine (url.AbsoluteUri); // prints 'javascript:void(0)'

Beachten Sie die Verwendung von AbsoluteUri und nicht unter Berufung auf ToString() , weil ToString die URL decodiert (um es „ den Menschen lesbare“), die nicht in der Regel ist das, was Sie wollen.


Beliebte Antwort

Ich kann es tun mit der Überprüfung der URL, ob http enthalten und wenn nicht den Domain-Wert hinzufügen

Das solltest du tun. Html Agility Pack kann Ihnen dabei nichts helfen:

var url = new Uri(
    new Uri(baseUrl).GetLeftPart(UriPartial.Path), 
    link.Attributes["href"].Value)
); 


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow