はじめに
Pythonでクエリ文字列を操作する(取得、生成)方法について解説します。
- WebAPIを呼び出す際のURL構築
- URLからパラメータを取り出したい
などのケースで活用できます。
使用するモジュール
Pythonの標準ライブラリのurllib.parseを使用します。
Pythonのバージョンは、3.7で検証しています。
urllib.parseの公式解説は以下に記載があります。

urllib.parse --- URL を構成要素に解析する
ソースコード: Lib/urllib/parse.py このモジュールでは URL (Uniform Resource Locator) 文字列をその構成要素 (アドレススキーム、ネットワーク上の位置、パスその他) に分解したり、構成要素を...
操作方法
クエリ文字列の取得方法
まずは、以下のURLからクエリ文字列を取得する方法を解説します。
googleでjavascriptを、言語指定指定で英語を指定して検索した場合のURLになります。
https://www.google.com/search?q=javascript&hl=en
ここで解説している、取得方法の流れを説明します。
- urlをパースして、ParseResultインスタンス取得
- クエリ文字列部分を取得(q=javascript&hl=enの部分)
- クエリ文字列を渡して、dictに格納(key=パラメータ名, value=値)
- クエリ文字列を渡して、listに格納(各リストの要素に、タプルでパラメータ名と値が格納される)
import urllib.parse
# googleでjavascriptを検索(q=javascript)し、言語指定に英語を指定(hl=en)
url = 'https://www.google.com/search?q=javascript&hl=en'
########################################################
# 01.urlをパースする
########################################################
parse_result = urllib.parse.urlparse(url)
print(type(parse_result))
# >> <class 'urllib.parse.ParseResult'>
print(parse_result)
# >> ParseResult(scheme='https', netloc='www.google.com', path='/search', params='', query='q=javascript&hl=en', fragment='')
########################################################
# 02.クエリ文字列部分を取得
########################################################
query_string = parse_result.query
print(query_string)
# >> q=javascript&hl=en
########################################################
# 03.クエリ文字列部分をパラメータごとに分解し、dictに格納
########################################################
query_string_dict = urllib.parse.parse_qs(query_string)
print(query_string_dict)
# >> {'q': ['javascript'], 'hl': ['en']}
########################################################
# 04.クエリ文字列部分をパラメータごとに分解し、listに格納
########################################################
query_string_list = urllib.parse.parse_qsl(query_string)
print(query_string_list)
# >> {[('q', 'javascript'), ('hl', 'en')]
クエリ文字列の生成
先ほどのもとになった以下のURLを生成することを最終目的としています。
https://www.google.com/search?q=javascript&hl=en
流れは、
- 指定したいパラメータ情報をdictに格納(query_string_dict = {‘q’: ‘javascript’, ‘hl’: ‘en’})
- 1.で作成したdictをもとに、クエリ文字列部分の文字列を取得
- ベースとなるURL(‘https://www.google.com/search?’) + 2.で作成したクエリ文字列を結合
import urllib.parse
# クエリ文字列に指定したいパラメータをdictへ設定
query_string_dict = {'q': 'javascript', 'hl': 'en'}
# クエリ文字列取得
query_string = urllib.parse.urlencode(query_string_dict)
print(query_string)
# >> q=javascript&hl=en
# 生成したクエリ文字列を結合
url = 'https://www.google.com/search?' + query_string
print(url)
# >> https://www.google.com/search?q=javascript&hl=en


コメント