[Python]URLの基本的使い方(クエリの取得/URLエンコード・デコード)

2022年1月9日日曜日

Python

Pythonにて、URLの取り扱い方をまとめて紹介します。


クエリの取得

URLからクエリパラメーターを取得します。

クエリパラメーターとは
http://httpbin.org/get?key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86のURLの内
key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86にあたる部分を言います。

キー名称key_1に値1が、
キー名称key_2に、値%E3%81%82%E3%81%84%E3%81%86が格納されています。

クエリパラメータの取得には、urllibを使用します。
urllibは標準ライブラリのため、pipなどで別途インストールする必要はありません。

以下のプログラムでは、
urllib.parse.urlparse(url).queryでクエリパラメータを取得し
urllib.parse.parse_qs(queries)でクエリパラメータを辞書型(dict)に変換します。 また、dictの値はlistで格納されている点に注意です。

# urllib.parseモジュールをimport
import urllib.parse

url = "http://httpbin.org/get?key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86"

# URLをパース
parse_result = urllib.parse.urlparse(url)
print(parse_result)
# ParseResult(scheme='http', netloc='httpbin.org', path='/get', params='', query='key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86', fragment='')

# Queryを取得
queries= urllib.parse.urlparse(url).query
print(queries)
# key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86

# QueryをDictに変換
query_dict = urllib.parse.parse_qs(queries)
print(query_dict)
# {'key_1': ['1'], 'key_2': ['あいう']}

後述しますがエンコードされた%E3%81%82%E3%81%84%E3%81%86は、
デコードされて格納されます。

# urllib.parseモジュールをimport
import urllib.parse

url = "http://httpbin.org/get?key_1=1&key_2=%E3%81%82%E3%81%84%E3%81%86"

# URLをパース
parse_result = urllib.parse.urlparse(url)
# Queryを取得
queries= urllib.parse.urlparse(url).query
# QueryをDictに変換
query_dict = urllib.parse.parse_qs(queries)

# 値を取得(文字列はデコード済み)
print( query_dict['key_1'][0] ) # 1
print( query_dict['key_2'][0] ) # あいう

URLのエンコード・デコード

URLエンコード・デコードとは

URLでは、日本語の文字列を使用できません。
このため、URLで使用可能な文字列に符号化します。この処理をURLエンコードといいます。

特にURLの場合%E3のように%を使用した形に変換されるため
パーセントエンコーディングと言います。

URLデコードは、エンコードした文字列を元の文字列に戻すことを言います。

  1. URLエンコード:URLで使用できない文字列を符号化する
    あいう%E3%81%82%E3%81%84%E3%81%86
  2. URLエンコード:符号化された文字列を元に戻す
    %E3%81%82%E3%81%84%E3%81%86あいう

URLエンコード

URLエンコードは先ほどと同様にurllibを用います。
urllib.parse.quote(string)で日本語をURLエンコードします。

# urllib.parseモジュールをimport
import urllib.parse

string = "あいう"
# "あいう"をURLエンコード
string_quote = urllib.parse.quote(string)
print(string_quote) # %E3%81%82%E3%81%84%E3%81%86

URLデコード

URLデコードは先ほどと同様にurllibを用います。
urllib.parse.unquote(string_quote)でエンコードをURLデコードします。

# urllib.parseモジュールをimport
import urllib.parse

string = "あいう"
# "あいう"をURLエンコード
string_quote = urllib.parse.quote(string)
print(string_quote) # %E3%81%82%E3%81%84%E3%81%86

# URLエンコードした文字列を日本語に戻す
decode_string = urllib.parse.unquote(string_quote)
print(decode_string) # あいう

AIエンジニア向けフリーランスならここがおすすめです

まずは無料会員登録

プロフィール

自分の写真
製造業に勤務する傍ら、日々AIの技術動向を調査しブログにアウトプットしています。 AIに関するご相談やお仕事のご依頼はブログのお問い合わせフォームか以下のアドレスまでお気軽にお問い合わせください。 bhupb13511@yahoo.co.jp

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology