1

私はある種のページスクレーパーを書いています。私がやろうとしていることの 1 つは、現在の URL を現在のページから抽出された URL フラグメントと結合することです。

このような:

if (WebPath.IsAbsolute(urlFragment))
    links.Add(new Uri(urlFragment));
else
    links.Add(new Uri(currentUrl, urlFragment));

簡単な方法 - このアプローチは、相対 Uris と絶対 Uris の両方で、ほとんどの場合に機能します。

ただし、一部のページはhttp://example.com/couple/of/folders/のように見え、URL フラグメントはcouple/of/otherfolders/です。そして、そこにあるすべてのブラウザは、それをhttp://example.com/couple/of/otherfoldersと解釈します。

もちろん、私のコードはhttp://example.com/couple/of/folders/couple/of/otherfoldersを生成します。これは、Uri の観点からは完全に正しいように見えますが、ブラウザがこれをどのように解釈できるかはわかりません。

さて、私はこの問題の解決策を探しましたが、2 つの URL を結合する方法を知らない人しか見つからなかったので、あまり解決できませんでした。私が見つけた最も近いものは、次の質問でした:ブラウザーと同じように、Java で URL フラグメントをどのように結合しますか? 、しかし答えは私の特定の問題に取り組んでいません。

私が欠けているものを誰か知っていますか?


編集 - これは IsAbsolute メソッドです (新しい Uri(link).IsAbsoluteUri に置き換える必要があることはわかっています):

public static bool IsAbsolute(string path)
{
    var uppercasePath = path.ToUpper();
    return uppercasePath.StartsWith("HTTP://") || uppercasePath.StartsWith("HTTPS://");
}
4

1 に答える 1