実践・上級問題チェック
問題 33 /40
クエリ文字の「'id=a%20c'」を得たい場合、【A】と【B】に記述するものはどれか。
from urllib import parse
parse.【A】({'id': 'a c'}, quote_via=parse.【B】)
選択 1
【A】 urlencode
【B】 quote
選択 2
【A】 urlparse
【B】 parse_qs
選択 3
【A】 parse_qs
【B】 urlencode
選択 4
【A】 quote
【B】 urlparse
解説
選択肢1が正解です。
parseモジュールの関数は名前がまぎらわしいですが、まとめると以下になります。
【urlparse()】
URLをパース(解析)して結果を返します。schemeなどの属性名や、インデックスで値を取得します。
【parse_ps()】
クエリ文字をパースして辞書で返します。urlparse()で取得した属性「query」を引数にすることができます。
【urlencode()】
辞書からクエリ文字を組み立てます。
【quote()、quote_plus()】
文字列をパーセントエンコードしてURLとして使えるようにします。
quote()は空白を「%20」に変換し、quote_plus()は空白を「+」に変換します。
quote()とquote_plus()は、parseモジュールのメソッドで使用してURL全体を変換することもできますが、問題文のようにurlencode()の引数「quote_via」に指定してクエリ文字の変換でも使用できます。
urlencode()はデフォルトでquote_plusが適用され、空白が「+」に変換されます。
問題文のようにquoteを指定すると、空白が「%20」に変換されます。
(公式書籍 p.322-323)