2011-12-02 29 views

Respuesta

36

Python 2

Usted puede utilizar el módulo urlparse para analizar una dirección URL y, a continuación, puede comprobar si es relativa o absoluta por verificando si tiene el nombre de host configurado.

>>> 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 se ha trasladado a urllib.parse, a fin de utilizar lo siguiente:

from urllib.parse import urlparse 

def is_absolute(url): 
    return bool(urlparse(url).netloc) 
+1

¿No debería '' www.example.com/some/path' contar también como absoluto? – Geo

+1

Oficialmente, es una URL relativa con toda la cadena como ruta. Si quieres que cuente como absoluto, deberías agregar el 'http: //' mediante algún preprocesamiento o no usar 'urlparse'. –

+2

Según RFC '// google.com' es una url relativa al protocolo. Y su código devolverá 'False' por ello. – Nik

17

Si desea saber si una URL es absoluta o relativa con el fin de unirse a ella con una URL base, que suele hacer de todos modos 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

Resulta que esto es lo que quería hacer - se trata el primer URL como valor predeterminado para todas las partes no especificadas de la segunda URL. Si el segundo es absoluto, simplemente usa ese. – rescdsk

-1

No está seguro de lo que estás preguntando. ¿Estás mirando para ver si comienza con http://? Si es así, una expresión regular sencilla funcionará.

(EDIT: Ver comentario a continuación - un punto muy bueno !!)

+3

NO use una expresión regular solo para verificar que una cadena comience con algún prefijo conocido. Usa el método 'startswith' de una cadena para eso. –

+0

Además, la comprobación de url es un poco más compleja que solo verificar cierto prefijo. – rplnt

1

no puedo comentar respuesta aceptada, por lo que escribir este comentario como nueva respuesta: esquema de control de la OMI en la respuesta aceptada (bool(urlparse.urlparse(url).scheme)) no es realmente una buena idea porque http://example.com/file.jpg, https://example.com/file.jpg y //example.com/file.jpg son URL absolutas pero en el último caso obtenemos scheme = ''

utilizo este código:

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

+0

AFAIK // foo/bar es una URL relativa relativa. Con "relativo" significa "sin esquema y netloc". – guettli

Cuestiones relacionadas