【Python】URLをパースして構成要素(ドメイン・パス・クエリ等)を取得する方法

WebスクレイピングやAPI連携の処理において、1つの長いURL文字列から「ドメイン名だけ」や「クエリパラメータだけ」を抜き出したい場合があります。

Pythonの標準ライブラリ urllib.parse モジュールにある urlparse() 関数を使用すると、URLを6つの構成要素に分解(パース)して簡単に取得できます。

目次

ParseResultオブジェクトの主要属性

urlparse() 関数が返すオブジェクト(ParseResult)が持つ、主要な属性とその意味は以下の通りです。

属性名概要抽出される部分の例
schemeプロトコル(スキーム)https, http
netlocネットワーク上の位置(ドメイン/ホスト名)www.example.com, api.server:8080
pathドメイン以下のファイルパス/articles/search, /index.html
queryクエリ文字列(パラメータ)q=python&page=1

実装例:検索URLの解析

ここでは、架空の不動産検索サイトのURLを対象に、その構成要素を分解して個別に表示するコードを実装します。

ソースコード

from urllib import parse

# 解析対象のURL(架空の物件検索URL)
# 構成: プロトコル://ドメイン/パス?クエリパラメータ
property_search_url = "https://realestate.example.co.jp/rent/tokyo/search?min_price=50000&max_price=80000&layout=1K"

# 1. URLをパース(解析)する
# urlparse(URL文字列) を実行すると、ParseResultオブジェクトが返されます
parsed_data = parse.urlparse(property_search_url)

# 2. 解析結果の全体像を確認
print(f"解析オブジェクト: {parsed_data}")
print("-" * 40)

# 3. 各属性(プロパティ)へアクセスして値を取り出す
print(f"プロトコル (scheme) : {parsed_data.scheme}")
print(f"ドメイン (netloc)   : {parsed_data.netloc}")
print(f"パス (path)         : {parsed_data.path}")
print(f"クエリ (query)      : {parsed_data.query}")

# おまけ: クエリパラメータをさらに辞書として扱いたい場合
# parse_qs を使うと {'min_price': ['50000'], ...} の形式に変換できます
query_dict = parse.parse_qs(parsed_data.query)
print("-" * 40)
print(f"クエリ辞書化        : {query_dict}")

実行結果

解析オブジェクト: ParseResult(scheme='https', netloc='realestate.example.co.jp', path='/rent/tokyo/search', params='', query='min_price=50000&max_price=80000&layout=1K', fragment='')
----------------------------------------
プロトコル (scheme) : https
ドメイン (netloc)   : realestate.example.co.jp
パス (path)         : /rent/tokyo/search
クエリ (query)      : min_price=50000&max_price=80000&layout=1K
----------------------------------------
クエリ辞書化        : {'min_price': ['50000'], 'max_price': ['80000'], 'layout': ['1K']}

解説

  • urlparse(): URLを構造的に分解するための関数です。戻り値はタプルのような性質を持つ ParseResult クラスのインスタンスで、属性名(.scheme など)でもインデックス([0] など)でもアクセス可能です。
  • 用途: リダイレクト先のドメインチェック、画像URLからのファイル名抽出、APIリクエスト時のパラメータ書き換えなどで頻繁に使用されます。
  • 注意点: URLとして不完全な文字列(例: example.com/foo のように https:// がないもの)を渡すと、正しく解析できない場合があります。その場合は scheme が空文字になったり、パスとして認識されたりします。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次