環境
- Windows 10
- Python 3.10.1
結論
urllib.parseモジュールを使用する
実装
urlの分解
- urlparseメソッドを使用する
- URLを6つの構成要素に分解(返り値は6つの構成要素のタプル)することが可能
- 各要素はそれぞれ、[scheme]:// [netloc] / [path] ; [parameters] ? [query] # [fragment]のようになる
shared\Domain\xurl.py
from urllib.parse import urlparse
from urllib.parse import urljoin
# URLを6つの構成要素に分解(返り値は6つの構成要素のタプル)
# [scheme]:// [netloc] / [path] ; [parameters] ? [query] # [fragment]
class XUrl:
def __init__(self, href):
self.href = href
def get_href(self):
return self.href
def get_scheme(self):
return urlparse(self.href).scheme
def get_netloc(self):
return urlparse(self.href).netloc
def get_path(self):
return urlparse(self.href).path
def get_params(self):
return urlparse(self.href).params
def get_query(self):
return urlparse(self.href).query
def get_fragment(self):
return urlparse(self.href).fragment
def get_baseurl(self):
return self.get_scheme() + self.get_netloc()
urlの結合
- urljoinメソッドでurlの結合が可能
shared\Domain\xurl.py
from urllib.parse import urlparse
from urllib.parse import urljoin
class XUrl:
def __init__(self, href):
self.href = href
def get_href(self):
return self.href
def get_scheme(self):
return urlparse(self.href).scheme
def get_netloc(self):
return urlparse(self.href).netloc
...割愛
def get_baseurl(self):
return f"{self.get_scheme()}://{self.get_netloc()}/"
# 基底URLと相対URLを組み合わせて絶対URLを生成します
def join_to(self, relative_path):
return urljoin(self.get_baseurl(), relative_path)
呼び出し側
tests\test_xurl.py
import pytest
from shared.Domain.xurl import XUrl
@pytest.fixture
def setuped_xurl():
xurl = XUrl("https://maasaablog.com/development/python/3795/#toc2")
return xurl
def test_対象のurlからスキーマのみ取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_scheme() == "https"
def test_対象のurlからnetlocのみ取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_netloc() == "maasaablog.com"
def test_対象のurlからpathのみ取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_path() == "/development/python/3795/"
def test_対象のurlからパラメータのみ取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_params() == ""
def test_対象のurlからfragmentのみ取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_fragment() == "toc2"
def test_基底パスを取得できること(setuped_xurl: XUrl):
assert setuped_xurl.get_baseurl() == "https://maasaablog.com/"
def test_基底パスと相対パスを結合できること(setuped_xurl: XUrl):
assert setuped_xurl.join_to("hoge") == "https://maasaablog.com/hoge"
以上です
まとめ
いかがでしたでしょうか。本記事では、Pythonでurl文字列の結合・分解等の処理を行う方法について紹介しています。ぜひ参考にしてみてください