実践・上級問題チェック

問題 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)