Comment extraire une URL complète avec HtmlAgilityPack - C #

c# extraction html-agility-pack hyperlink

Question

Bien avec le chemin ci-dessous, il extrait uniquement l'URL de renvoi comme ceci

le code d'extraction:

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

Le code de l'URL

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

L'URL extraite

Login.aspx

Mais je veux obtenir un lien réel quel navigateur analysé comme

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

Je peux le faire en vérifiant si l’URL contient ou non http et si ce n’est pas le cas, cela peut causer des problèmes à certaines occasions et je pense que ce n’est pas une solution très judicieuse.

c # 4.0, HtmlAgilityPack.1.4.0

Réponse acceptée

En supposant que vous ayez l'URL d'origine, vous pouvez combiner l'URL analysée comme suit:

// 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)'

Notez l'utilisation de AbsoluteUri et ne vous fiez pas à ToString() car ToString décode l'URL (pour la rendre plus "lisible par l'homme"), ce qui n'est généralement pas ce que vous voulez.


Réponse populaire

Je peux le faire en vérifiant l'URL contenant http et si ce n'est pas le cas

C'est ce que tu devrais faire. Html Agility Pack n'a rien pour vous aider avec ceci:

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow