Cómo extraer la URL completa con HtmlAgilityPack - C #

c# extraction html-agility-pack hyperlink

Pregunta

De acuerdo con la forma en que se encuentra debajo, está extrayendo solo la URL de referencia como esta.

el código de extracción:

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

El codigo url

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

La url extraída

Login.aspx

Pero quiero obtener un enlace real de lo que el navegador analizó como

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

Puedo hacerlo verificando la url si contiene http y si no agrego el valor del dominio, pero puede causar algunos problemas en algunas ocasiones y creo que no es una solución muy acertada.

c # 4.0, HtmlAgilityPack.1.4.0

Respuesta aceptada

Suponiendo que tenga la url original, puede combinar la url analizada algo como esto:

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

Tenga en cuenta el uso de AbsoluteUri y no depender de ToString() porque ToString decodifica la URL (para que sea más "legible para los humanos"), que no suele ser lo que desea.


Respuesta popular

Puedo hacerlo verificando la url si contiene http y si no agrego el valor del dominio

Eso es lo que debes hacer. Html Agility Pack no tiene nada para ayudarte con esto:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué