Python - urlparse ссылка

Я хочу добавить схему в URL, если нет.

import urlparse

p = urlparse.urlparse(url)
print p
netloc = p.netloc or p.path
path = p.path if p.netloc else ''
scheme = p.scheme or 'http'
p = urlparse.ParseResult(scheme, netloc, path, *p[3:])
url = p.geturl()
print url

Приведенный выше код прекрасно работает, если у меня нет номера порта. Когда номер порта есть, он показывает произвольный вывод. Например:

input go.com:8000/3/
output go.com://8000/3/

То же самое касается localhost, Какой подход я должен следовать в этом случае?

2 ответа

Если у вас есть номер порта и у вас нет схемы URL, ваш URL должен начинаться с //, urlparse распознает netloc, только если он правильно введен символом "//". В противном случае предполагается, что ввод является относительным URL и, следовательно, начинается с компонента пути.

проверьте следующий код и соблюдайте разницу

1) В этом первом примере я добавил //, чтобы синтаксический анализатор идентифицировал его как netloc, а не как схему, а затем пришел путь.

p.urlparse('//go.com:8000/3/')
ParseResult(scheme='', netloc='go.com:8000', path='/3/', params='', query='', fragment='')

2) В этом примере у нас нет схемы, и dint указывает //, и у нас нет номера порта, поэтому весь URL-адрес рассматривается как путь.

p.urlparse('go.com/3/')
ParseResult(scheme='', netloc='', path='go.com/3/', params='', query='', fragment='')

3) В этом примере я указал порт. мы знаем, что после схемы имеем: //, синтаксический анализатор распознается до: как схема, а после: как путь.

p.urlparse('go.com:8000/3/')
ParseResult(scheme='go.com', netloc='', path='8000/3/', params='', query='', fragment='')

Вот как urlparse анализирует URL. чтобы заставить работать схему URL, проверьте: // если вы не нашли явно добавьте // в начало вашего URL, тогда работа будет выполнена.

для получения более подробной информации вы можете посетить этот URL [ https://docs.python.org/2/library/urlparse.html]

Согласно документации, вам нужно правильно ввести netloc для правильного разбора. Так что попробуйте добавить // в начале URL, если это не абсолютный путь, например:

urlparse.urlparse('//go.com:8000/3')
ParseResult(scheme='', netloc='go.com:8000', path='/3', params='', query='', fragment='')

Таким образом, он правильно идентифицирует каждую часть URL. Также ознакомьтесь с документами: https://docs.python.org/2/library/urlparse.html.

Другие вопросы по тегам