Объединение url с urlunparse - PullRequest
       2

Объединение url с urlunparse

6 голосов
/ 26 сентября 2010

Я пишу что-то, чтобы «очистить» URL. В этом случае все, что я пытаюсь сделать, это вернуть поддельную схему, так как urlopen не будет работать без нее. Однако, если я протестирую это с www.python.org, он вернет http:///www.python.org. Кто-нибудь знает, почему дополнительный /, и есть ли способ вернуть это без него?

def FixScheme(website):

   from urlparse import urlparse, urlunparse

   scheme, netloc, path, params, query, fragment = urlparse(website)

   if scheme == '':
       return urlunparse(('http', netloc, path, params, query, fragment))
   else:
       return website

Ответы [ 2 ]

9 голосов
/ 26 сентября 2010

Проблема заключается в том, что при разборе очень неполного URL www.python.org указанная вами строка фактически берется в качестве компонента path URL, а netloc (сетевое расположение) -пусто как и схема.Для дефолта по схеме вы можете фактически передать второй параметр scheme в urlparse (упрощая вашу логику), но это не поможет с проблемой "empty netloc".Так что вам нужна логика для этого случая, например

if not netloc:
    netloc, path = path, ''
0 голосов
/ 26 сентября 2010

Это потому, что urlparse интерпретирует "www.python.org" не как имя хоста (netloc), а как путь, как браузер, если бы он встретил эту строку в атрибуте href. Тогда, кажется, urlunparse интерпретирует схему «http» специально. Если вы введете «x» в качестве схемы, вы получите «x: www.python.org».

Я не знаю, с каким диапазоном входов вы имеете дело, но, похоже, вам не нужны urlparse и urlunparse.

...