【Python】URLのクエリ文字列を操作する

pythonPython

はじめに

Pythonでクエリ文字列を操作する(取得、生成)方法について解説します。

  • WebAPIを呼び出す際のURL構築
  • URLからパラメータを取り出したい

などのケースで活用できます。

使用するモジュール

Pythonの標準ライブラリのurllib.parseを使用します。

Pythonのバージョンは、3.7で検証しています。

urllib.parseの公式解説は以下に記載があります。

urllib.parse --- URL を解析して構成要素にする — Python 3.10.0b2 ドキュメント

操作方法

クエリ文字列の取得方法

まずは、以下のURLからクエリ文字列を取得する方法を解説します。

googleでjavascriptを、言語指定指定で英語を指定して検索した場合のURLになります。

https://www.google.com/search?q=javascript&hl=en

ここで解説している、取得方法の流れを説明します。

  1. urlをパースして、ParseResultインスタンス取得
  2. クエリ文字列部分を取得(q=javascript&hl=enの部分)
  3. クエリ文字列を渡して、dictに格納(key=パラメータ名, value=値)
  4. クエリ文字列を渡して、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

流れは、

  1. 指定したいパラメータ情報をdictに格納(query_string_dict = {‘q’: ‘javascript’, ‘hl’: ‘en’})
  2. 1.で作成したdictをもとに、クエリ文字列部分の文字列を取得
  3. ベースとなる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

コメント