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

私はURLをチェックすることでそれを行うことができます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をデコードし、あなたが望むものを一般的にされていない 、(それはより「人間が読める」作るために)。


人気のある回答

私はURLをチェックすることでそれを行うことができますhttpを含むかどうか、ドメイン値を追加しない

それはあなたがすべきことです。 Html Agility Packはこれを手助けするものは何もありません:

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow