urlparse.urlparse возвращает 3 '/' вместо 2 после схемы - PullRequest
8 голосов
/ 03 сентября 2011

Я бы хотел добавить имя схемы 'http' перед заданной строкой URL, если оно отсутствует. В противном случае, оставьте URL-адрес в покое, чтобы я подумал, что urlparse - правильный способ сделать это. Но когда схемы нет и я использую get url, я получаю /// вместо '//' между схемой и доменом.

>>> t = urlparse.urlparse('www.example.com', 'http')
>>> t.geturl()
'http:///www.example.com' # three ///

Как мне преобразовать этот URL, чтобы он действительно выглядел так:

'http://www.example.com' # two //

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011

Короткий ответ (но немного тавтологический):

>>> urlparse.urlparse("http://www.example.com").geturl()
'http://www.example.com'

В вашем примере кода имя хоста анализируется как путь, а не как местоположение в сети:

>>> urlparse.urlparse("www.example.com/go")
ParseResult(scheme='', netloc='', path='www.example.com/go', params='', \
    query='', fragment='')

>>> urlparse.urlparse("http://www.example.com/go")
ParseResult(scheme='http', netloc='www.example.com', path='/go', params='', \
    query='', fragment='')
1 голос
/ 03 сентября 2011

Если вы хотите использовать urlparse так, как вы намеревались, ближайший «правильный» эквивалент - это использовать «//www.example.com» в качестве строки URL-адреса. Такая строка URL-адреса однозначно является абсолютным путем без схемы, поэтому вы можете указать «http» в качестве схемы по умолчанию. Я полагаю, вы могли бы сделать это, определив, содержит ли ваш URL строку «//», а если нет, добавив «//» впереди.

...