좋아요. 아래의 방법은 이처럼 추천 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)
);