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}')