Top.Mail.Ru
python по русски -- Day
? ?
python по русски -- Day [entries|friends|calendar]
Ру_питон

[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

распарсить и изменить части url [18 Apr 2012|04:41pm]
Нужно взять URL и заменить некоторые части, для того что бы показать пользователю в красивом виде. Проблема в том, что бы собрать url из кусков обратно.

Например,

http://xn--80a1acny.xn--p1ai/resp_engine.aspx?Path=RP/INDEX/RU/Home/Search&keyword=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
в
http://почта.рф/resp_engine.aspx?Path=RP/INDEX/RU/Home/Search&keyword=привет

URL легко распарсить при помощи urlparse.urlsplit. Дальше я в try/except заменяю host.decode('idna').encode('UTF-8') и query = urllib.unquote_plus(query).decode('UTF-8').encode('UTF-8')

Проблема в том, что urlparse позволяет распарсить запрос, но не позволяет заменить его части, он ведёт себя как иммутабельный тупл.

Можно написать код:
протокол и хост соединяем через ://
добавляем path
если query не пустой, то добавляем его через '?'
если хэш-тег (#fragment) не пустой, добавляем его через #


но вроде urllib уже умеет это делать, проблема только в передаче параметров - SplitResult.geturl требует на входе SplitResult, а я не могу собрать свой SplitResult! И я не уверен на 100% в том что я - корректно склею.

updated: в конце концов получилось что-то такое - http://dobrokot.ru/dump/user_friendly_url.py
updated: конретно на заданный вопрос - ответ urlparse.urlunsplit, умудрился просмотреть его в документации (правда, мне понадобилась чуть более тонкая логика в склейке). Спасибо ImageAndy Shevchenko-ядовитому!
25 comments|post comment

navigation
[ viewing | April 18th, 2012 ]
[ go | previous day|next day ]
Image