HtmlAgilityPack으로 전체 URL을 추출하는 방법 - C #

c# extraction html-agility-pack hyperlink

문제

좋아요. 아래의 방법은 이처럼 추천 URL 만 추출하는 것입니다.

추출 코드 :

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

URL 코드

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

추출 된 URL

Login.aspx

하지만 나는 브라우저가 파싱 한 것과 같은 실제 링크를 원합니다.

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

http를 포함하고 있는지 여부를 확인하고 도메인 값을 추가하지 않으면이를 수행 할 수 있지만 어떤 경우에는 일부 문제가 발생할 수 있으므로 현명한 해결책이 아닙니다.

c # 4.0, HtmlAgilityPack.1.4.0

수락 된 답변

원래 URL이 있다고 가정하면 다음과 같이 파싱 된 URL을 결합 할 수 있습니다.

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

사용 주 AbsoluteUri 와에 의존하지 ToString() 때문에 ToString URL을 디코딩 당신이 원하는 일반적으로하지 않은, (더 "사람이 읽을 수있는"확인합니다).


인기 답변

http를 포함하고 있는지 여부를 확인하고 도메인 값을 추가하지 않으면이를 수행 할 수 있습니다.

그것이 당신이해야하는 것입니다. Html 민첩성 팩은 당신을 도울 방법이 없습니다 :

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.