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.