urlparseでURLを分解する/組み立てる
urllib.parseのurlparseを使うと、受け取ったURLを解析して分解したり、組み立て直すことができる。 urllibについては、本の冒頭で「繰り返し出てくるからドキュメントを読んでおけ」とあったとおり、細かい部分は一切説明がないので、メモしておく。
scheme://netloc/path;parameters?query#fragment
このURLの構造にもとづいて、受け取ったURLがscheme、netloc、path、parameters、query、fragmentの6つの要素からなるタプルになり、
from urllib.parse import urlparse url = "http://mankuro.xyz/blog/2017/05/11/relax/#respond" parsedUrl = urlparse(url)
こうした場合、
parsedUrl.scheme parsedUrl.netloc parsedUrl.path parsedUrl.parameters parsedUrl.query parsedUrl.fragment
でそれぞれ取り出すことができる。なるほど。 が、しかし、ちょっと待てよ?僕が知っているタプルの特徴は、「シーケンス型」なので値にアクセスするにはインデックスを使う、というものだ。
for i in range(len(parsedUrl)): print(parsedUrl[i])
みたいにやらないといけないのではなかったのか?
戻り値は実際にはtupleのサブクラスのインスタンスです。
この辺に秘密がありそうな気がするが、どうやらPythonで「.(ドット)」でつなぐ場合にどのようなものがあるか、というのをもう少しちゃんと理解する必要がありそうだ。 ともかく、urlparseの使い方自体は理解した。たとえば、受け取ったURLの階層が深かったりした場合に、一回分解してからparsedUrl.schemeとparsedUrl.netlocを合体したものと正規表現などを組み合わせることで、トップレベルからアクセスし直したりできる、ということだ。