[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技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology