Python での Urljoin の概要

Migel Hewage Nimesha 2023年12月11日
Python での Urljoin の概要

このチュートリアルでは、Python urljoin と、それを使用したときの動作について説明します。 また、さまざまなサンプル コードを使用して、Python で urljoin を使用する方法も示します。

Python での urljoin の紹介

URL には、通常、Web サイトの評価、参加者の検索、または各領域での資料の配置を評価する際に利用できる重要な情報が含まれています。

URL が非常に複雑に見える場合もありますが、Python には、URL の解析、結合、および URL の構成部分の取得を可能にするさまざまな貴重なライブラリが付属しています。

Python 3 の urllib パッケージを使用すると、ユーザーはスクリプト内から Web サイトを探索でき、urljoin() などの URL 関数を管理するためのいくつかのモジュールが含まれています。

urllib ライブラリは、ユーザーが Universal Resource Locator を使用して Web サイトにアクセスし、対話できるようにする Python プログラミングで URL を使用する場合に重要です。

また、このライブラリは、urllib.requesturllib.errorurllib.parseurllib.robotparser などのパッケージをさらに提供します。

urljoin() メソッドの使用

urljoin() メソッドは、多くの関連 URL が必要な場合に役立ちます。 たとえば、Web サイト用に生成される一連のページの URL と、ベース URL への新しい値の追加。

構文:

urljoin(baseurl, newurl, allowFrag=None)

ベース URL (baseurl) を別の URL (newurl) と組み合わせて完全な URL を作成した後、非公式に、これはベース URL の一部をアドレス指定スキームとして使用し、ネットワークの場所とパスで不足している部分を提供します。 相対 URL。

例として:

>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', 'FAQ.html')

出力:

'http://www.cwi.nl:50/%7Eguido/FAQ.html'

allowFrag 引数は、urlparse() と同じ意味とデフォルトで構成されます。 newurl// または scheme:// で始まる絶対 URL の場合、newurlhostname および/または scheme が出力に表示されます。 例として:

>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', '//www.python.org/%7Eguido')

出力:

'https://www.python.org/%7Eguido'

これが例外の出力でない場合は、urlsplit()urlunsplit() を使用して newurl を前処理し、可能なスキームとネットワーク ロケーション部分を切り離します。

関数が気になる場合は、urlparse()urlsplit()、および urlunsplit() の機能を以下に簡単に説明します。

  • urlparse() - このモジュールを使用すると、ユーザーは URL をさまざまな部分にすばやく分離し、URL から特定の部分を除外できます。
  • urlsplit() - このモジュールは urlparse() の代替ですが、URL からパラメーターを分割しないため、異なります。 urlsplit() モジュールは、各パス セグメントのパラメーターをサポートする RFC 2396 に従う URL に役立ちます。
  • urlunsplit() - このモジュールの機能は、urlsplit() によって返されたタプルの要素を組み合わせて、文字列として完全な URL を形成することです。

urljoin() モジュールを使用して URL を構築する

Python の requests モジュールは、URL の構築と URL 値の動的な操作を支援します。 プログラムによって、URL の任意のサブディレクトリを取得し、URL の一部を新しい値に置き換えて、新しい URL を作成できます。

次のコード フェンスは、urljoin() を使用して、URL パス内のさまざまなサブフォルダーをフェッチします。 urljoin() は、URL を構築するベース URL に新しい値を追加するために使用されます。

from requests.compat import urljoin

base = "https://stackoverflow.com/questions/10893374"
print(urljoin(base, "."))
print(urljoin(base, ".."))
print(urljoin(base, "..."))
print(urljoin(base, "/10893374/"))

url_query = urljoin(base, "?vers=1.0")
print(url_query)
url_sec = urljoin(url_query, "#section-5.4")
print(url_sec)

出力:

https://stackoverflow.com/questions/
https://stackoverflow.com/
https://stackoverflow.com/questions/...
https://stackoverflow.com/10893374/
https://stackoverflow.com/questions/10893374?vers=1.0
https://stackoverflow.com/questions/10893374?vers=1.0#section-5.4

PythonでURLを分割する方法はありますか? もちろんはい!

URL をプライマリ アドレス以外の多くのコンポーネントに分割できます。 URL に付加された特定のクエリまたはタグに使用される追加パラメーターは、以下に示すように urlphase() メソッドを使用して分割されます。

from requests.compat import urlparse

url_01 = (
    "https://docs.python.org/3/library/__main__.html?highlight=python%20hello%20world"
)
url_02 = "https://docs.python.org/2/py-modindex.html#cap-f"
print(urlparse(url_01))
print(urlparse(url_02))

出力:

ParseResult(scheme='https', netloc='docs.python.org', path='/3/library/__main__.html', params='', query='highlight=python%20hello%20world', fragment='')
ParseResult(scheme='https', netloc='docs.python.org', path='/2/py-modindex.html', params='', query='', fragment='cap-f')

urljoin() を使用して URL を形成する

urllib.parse からインポートされた urljoin() メソッドの動作を理解するために、さまざまな部分からの URL の形成が示され、以下の例で説明されています。

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')

出力:

'task'

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')

出力:

'http://test/task'

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')

出力:

'http://test/task'

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')

出力:

'http://test/add/task'

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')

出力:

'http://test/task'

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')

出力:

'task'

上記のスニペットでは、最初の引数は、ブラウザーに表示されるページと等しい baseurl (urljoin() の構文を想定) と見なすことができます。

2 番目の引数 newurl は、そのページのアンカーの href と見なすことができます。 結果として、最終的な URL は、ユーザーがクリックしたページに移動します。

上記のスニペットを検討する場合、baseurlにはスキームとドメインが含まれていると考える人もいます。

コード例:

>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')

出力:

'http://test/task'

仮想ホスティングの側面と <a href='task'>Baz</a> のようなアンカーを考慮すると、リンクはユーザーを上記のスニペットの URL に誘導できます。

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')

出力:

'http://test/task'

上記のように別の部分 test/add を追加すると、ユーザーを上記の URL に誘導する task への相対リンクが作成されます。

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')

出力:

'http://test/add/task'

ここで、test/add/ が追加され、別の相対リンク: test/add/task に移動します。

>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')

出力:

'http://test/task'

ユーザーが test/add/ を使用していて、href/task にある場合、ユーザーを test/task にリンクします。 したがって、Python の urljoin() は、必要に応じて URL を計算するのに役立つ便利な関数であると言えます。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.