はじめに
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
コメント