| распарсить и изменить части 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, умудрился просмотреть его в документации (правда, мне понадобилась чуть более тонкая логика в склейке). Спасибо Andy Shevchenko-ядовитому!
|
|