PythonでURLのパラメーターを取得する方法

  URLのパラメーターを取得

from urllib.parse import urlparse, parse_qs

# URLを指定
url = 'https://www.example.com/search?q=python&page=2'

# URLをパースしてパラメーターを取得
parsed = urlparse(url)
query_params = parse_qs(parsed.query)

# パラメーターの値を取得
query = query_params.get('q', [''])[0]  # 'python'
page = query_params.get('page', [''])[0]  # '2'

print(f'検索語: {query}')
print(f'ページ番号: {page}')

 

urllib.parseモジュールからurlparseとparse_qs関数をインポート。

urlparse関数でURLをパースし、parse_qs関数でクエリ文字列をパースしてパラメーターを辞書型で取得。
query_params辞書からパラメーターの値を取得。
getメソッドを使うと、キーが存在しない場合でも例外が発生せず、デフォルト値を指定できる。

 

もしくは、

 

from urllib.parse import urlparse, parse_qsl

# URLを指定
url = 'https://www.example.com/search?q=python&page=2'

# URLをパースしてパラメーターを取得
parsed = urlparse(url)
query_params = dict(parse_qsl(parsed.query))

# パラメーターの値を取得
query = query_params.get('q', '')
page = query_params.get('page', '')

print(f'検索語: {query}')
print(f'ページ番号: {page}')

 

parse_qslを使った方が、値をリストで返さないので扱いやすい?

 

 

現在のURLを取得

 

from urllib.parse import urlunparse, urljoin
import os

def get_current_url():
    # SERVER_NAMEとSERVER_PORTからベースURLを構築
    scheme = os.environ.get('REQUEST_SCHEME', 'http')
    server_name = os.environ.get('SERVER_NAME', 'localhost')
    server_port = os.environ.get('SERVER_PORT', '80')
    base_url = urlunparse((scheme, server_name + ':' + server_port, '', '', '', ''))

    # REQUEST_URIから完全なURLパスを取得
    url_path = os.environ.get('REQUEST_URI', '/')

    # ベースURLとURLパスを結合して現在のURLを作成
    current_url = urljoin(base_url, url_path)

    return current_url

current_url = get_current_url()
print(current_url)

 

 

現在のURLを取得してパラメーターを取得する

一つにまとめるとこんな感じ。

from urllib.parse import urlparse, urlunparse, urljoin, parse_qsl
import os

def get_current_url():
    # SERVER_NAMEとSERVER_PORTからベースURLを構築
    scheme = os.environ.get('REQUEST_SCHEME', 'http')
    server_name = os.environ.get('SERVER_NAME', 'localhost')
    server_port = os.environ.get('SERVER_PORT', '80')
    base_url = urlunparse((scheme, server_name + ':' + server_port, '', '', '', ''))

    # REQUEST_URIから完全なURLパスを取得
    url_path = os.environ.get('REQUEST_URI', '/')

    # ベースURLとURLパスを結合して現在のURLを作成
    current_url = urljoin(base_url, url_path)

    parsed = urlparse(current_url)
    query_params = dict(parse_qsl(parsed.query))

    query = query_params.get('q', '')
    page = query_params.get('page', '')

    return query, page

query, page = get_current_url()
print(f'検索語: {query}')
print(f'ページ番号: {page}')

 

通常はポートも要らんし、使い勝手を考えたらこんな感じ?

from urllib.parse import urlparse, urlunparse, urljoin, parse_qsl
import os

def get_current_url_params():
    current_url = construct_current_url()
    parsed = urlparse(current_url)
    query_params = dict(parse_qsl(parsed.query))
    return query_params

def construct_current_url():
    scheme = os.environ.get('REQUEST_SCHEME', 'http')
    server_name = os.environ.get('SERVER_NAME', 'localhost')
    base_url = urlunparse((scheme, server_name, '', '', '', ''))

    url_path = os.environ.get('REQUEST_URI', '/')

    current_url = urljoin(base_url, url_path)
    return current_url

# 使用例
params = get_current_url_params()
query = params.get('q', '')
page = params.get('page', '')

print(f'検索語: {query}')
print(f'ページ番号: {page}')