2010-09-26 11 views
6

Escribo algo para 'limpiar' una URL. En este caso, todo lo que intento hacer es devolver un esquema falso ya que urlopen no funcionará sin uno. Sin embargo, si pruebo esto con www.python.org Devolverá http:///www.python.org. ¿Alguien sabe por qué el extra /, y hay una manera de devolver esto sin él?Combinación de una url con urlunparse

def FixScheme(website): 

    from urlparse import urlparse, urlunparse 

    scheme, netloc, path, params, query, fragment = urlparse(website) 

    if scheme == '': 
     return urlunparse(('http', netloc, path, params, query, fragment)) 
    else: 
     return website 

Respuesta

8

problema es que en el análisis del muy URL incompleta www.python.org, la cadena que da se toma realmente como el componente path de la URL, con el (ubicación de red) netloc un ser vacío, así como el esquema . Para el incumplimiento del esquema, puede pasar un segundo parámetro scheme al urlparse (simplificando su lógica) pero eso no ayuda con el problema de "netloc vacío". Por lo tanto, necesita un poco de lógica para ese caso, p.

if not netloc: 
    netloc, path = path, '' 
+0

Eso tiene perfecto sentido, es asumir que existe el netloc ya que es una cadena vacía y concatenar el extra/que debería estar allí. ¡Su solución funciona! Gracias por la respuesta rápida. – Ben

+0

@Ben, ¡de nada! –

+0

@Ben, debe hacer clic en la marca de verificación a la izquierda de esta respuesta para marcarla como aceptada =) – katrielalex

0

Es porque urlparse está interpretando "www.python.org" no como el nombre de host (netloc), sino como el camino, al igual que un navegador habría encontrado si esa cadena en un atributo href. Entonces urlunparse parece interpretar el esquema "http" especialmente. Si ingresa "x" como esquema, obtendrá "x: www.python.org".

No sé con qué rango de entradas está tratando, pero parece que podría no querer urlparse y urlunparse.

Cuestiones relacionadas