Quelle est la solution préférée pour vérifier si une URL est relative ou absolue?

32
Geo 2 déc. 2011 à 17:33

4 réponses

Meilleure réponse

Python 2

Vous pouvez utiliser le module urlparse pour analyser une URL, puis vous pouvez vérifier s'il est relatif ou absolu en vérifiant s'il a le nom d'hôte défini.

>>> 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 a été déplacé vers urllib.parse, utilisez donc ce qui suit:

from urllib.parse import urlparse

def is_absolute(url):
    return bool(urlparse(url).netloc)
52
Kukanani 2 mars 2017 à 21:34

Si vous voulez savoir si une URL est absolue ou relative pour la joindre à une URL de base, je fais généralement urlparse.urljoin quand même:

>>> 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'
>>> 
22
warvariuc 6 janv. 2015 à 07:43

Impossible de commenter la réponse acceptée, alors écrivez ce commentaire comme nouvelle réponse: le schéma de vérification de l'OMI dans la réponse acceptée (bool(urlparse.urlparse(url).scheme)) n'est pas vraiment une bonne idée en raison de http://example.com/file.jpg, https: / /example.com/file.jpg et //example.com/file.jpg sont des URL absolues mais dans le dernier cas, nous obtenons le schéma = ''

J'utilise ce code:

is_absolute = True if '//' in my_url else False

2
Alexander Ovchinnikov 23 janv. 2014 à 02:40

Je ne sais pas de quoi vous parlez. Cherchez-vous simplement à voir si cela commence par http://? SI c'est le cas, une simple expression régulière fera l'affaire.

(EDIT: voir le commentaire ci-dessous - un très bon point !!)

-1
maneesha 2 déc. 2011 à 13:54
8357098