Подтвердить что ты не робот

Как проверить, является ли URL-адрес абсолютным с помощью Python?

Какое предпочтительное решение для проверки относительного или абсолютного URL-адреса?

4b9b3361

Ответ 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: см. комментарий ниже - очень хорошая точка!)