распарсить и изменить части url
Нужно взять URL и заменить некоторые части, для того что бы показать пользователю в красивом виде. Проблема в том, что бы собрать url из кусков обратно.
Например,
http://xn--80a1acny.xn--p1ai/resp_engine.aspx?Path=RP/INDEX/RU/Home/S earch&keyword=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
в
http://почта.рф/resp_engine.aspx?Path=RP/INDEX/RU/Home/S earch&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-ядовитому!
Например,
http://xn--80a1acny.xn--p1ai/resp_engine.aspx?Path=RP/INDEX/RU/Home/S
в
http://почта.рф/resp_engine.aspx?Path=RP/INDEX/RU/Home/S
URL легко распарсить при помощи urlparse.urlsplit. Дальше я в try/except заменяю host.decode('idna').encode('UTF-8') и query = urllib.unquote_plus(query).decode('UTF-8'
Проблема в том, что urlparse позволяет распарсить запрос, но не позволяет заменить его части, он ведёт себя как иммутабельный тупл.
Можно написать код:
протокол и хост соединяем через ://
добавляем path
если query не пустой, то добавляем его через '?'
если хэш-тег (#fragment) не пустой, добавляем его через #
но вроде urllib уже умеет это делать, проблема только в передаче параметров - SplitResult.geturl требует на входе SplitResult, а я не могу собрать свой SplitResult! И я не уверен на 100% в том что я - корректно склею.
updated: в конце концов получилось что-то такое - http://dobrokot.ru/dump/user_friendly_url.py
updated: конретно на заданный вопрос - ответ urlparse.urlunsplit, умудрился просмотреть его в документации (правда, мне понадобилась чуть более тонкая логика в склейке). Спасибо
