月別アーカイブ: 2012年7月

PythonでURLを弄るだけの簡単なお仕事

PythonでちょいとばかりURLを弄る必要があったのでメモ。
あるいは、urlparseモジュールで遊んでみたとも言えよう。
まあ、話は簡単でこんなURLがあるとしますぜ。

http://www.sample.co.jp/apps/view?lang=ja&code=utf-8&id=123#top

こいつをこんな感じにパースしたいと。

www.sample.co.jp, /apps/view, lang=ja%code=utf-8%id=123, top

イメージできた?
難しく言うと、ホスト部とパス部、パラメータ群、HTMLで言うところの#hogehogeのあれ、にそれぞれ分割したい。

さっそくgoogle様に教えを請うたところ、urlparseモジュールを使いなさいと。
ふむ、ではいじってみましょう。

$ python
>> import urlparse
>>> parse_url = urlparse.urlparse('http://www.sample.co.jp/apps/view?lang=ja&code=utf-8&id
=123#top')
>>> parse_url
ParseResult(scheme='http', netloc='www.sample.co.jp', path='/apps/view', params='', query='lang=ja&code=utf-8&id=123', fragment='top')
>>> parse_url.netloc
'www.sample.co.jp'
>>> parse_url.path
'/apps/view'
>>> parse_url.query
'lang=ja&code=utf-8&id=123'
>>> parse_url.fragment
'top'

何だあっさりと出来ちまったぜ。さすがPython、恐るべし。

ここまで来るとURLにくっついてきているパラメータもパースしたいですね。

>>> urlparse.parse_qsl(parse_url.query)
[('lang', 'ja'), ('code', 'utf-8'), ('id', '123')]

これまたurlparseモジュールでできちゃったよ。
タプルは扱いづらいよぅ、せめてdictに。という場合はdict()にぶち込めばいい。

>>> dict(urlparse.parse_qsl(parse_url.query))
{'lang': 'ja', 'code': 'utf-8', 'id': '123'}