Какое предпочтительное решение для проверки относительного или абсолютного URL-адреса?
Как проверить, является ли URL-адрес абсолютным с помощью Python?
Ответ 1
Python 2
Вы можете использовать модуль urlparse
для анализа URL-адреса, а затем вы можете проверить, является ли он относительным или абсолютным, проверяя, имеет ли он имя узла хоста.
>>> import urlparse
>>> def is_absolute(url):
... return bool(urlparse.urlparse(url).netloc)
...
>>> is_absolute('http://www.example.com/some/path')
True
>>> is_absolute('//www.example.com/some/path')
True
>>> is_absolute('/some/path')
False
Python 3
urlparse
был перенесен на urllib.parse
, поэтому используйте следующее:
from urllib.parse import urlparse
def is_absolute(url):
return bool(urlparse(url).netloc)
Ответ 2
Если вы хотите узнать, является ли URL абсолютным или относительным, чтобы присоединиться к нему с базовым URL-адресом, я обычно urlparse.urljoin
>>> from urlparse import urljoin
>>> urljoin('http://example.com/', 'http://example.com/picture.png')
'http://example.com/picture.png'
>>> urljoin('http://example1.com/', '/picture.png')
'http://example1.com/picture.png'
>>>
Ответ 3
Не могу прокомментировать принятый ответ, поэтому напишите этот комментарий как новый ответ: схема проверки IMO в принятом ответе (bool(urlparse.urlparse(url).scheme)
) на самом деле не очень хорошая идея из-за http://example.com/file.jpg, https://example.com/file.jpg и //example.com/file.jpg являются абсолютными URL-адресами, но в последнем случае мы получаем Схема = ''
Я использую этот код:
is_absolute = True if '//' in my_url else False
Ответ 4
Не уверен, о чем вы спрашиваете.
Вы просто хотите посмотреть, начнется ли оно с http://
?
ЕСЛИ так, простое регулярное выражение сделает трюк.
(EDIT: см. комментарий ниже - очень хорошая точка!)