2011-09-02 9 views
7

Vorrei aggiungere il nome dello schema 'http' davanti a una stringa di url data se manca. Altrimenti, lascia l'url da solo, quindi ho pensato che urlparse fosse il modo giusto per farlo. Ma ogni volta che non ci sono schemi e io uso get url, ottengo /// invece di "//" tra lo schema e il dominio.urlparse.urlparse restituisce 3 '/' anziché 2 dopo lo schema

>>> t = urlparse.urlparse('www.example.com', 'http') 
>>> t.geturl() 
'http:///www.example.com' # three /// 

Come faccio a convertire questo URL in modo che si presenta come:

'http://www.example.com' # two // 

risposta

4

Risposta breve (ma è un po 'tautologico):

>>> urlparse.urlparse("http://www.example.com").geturl() 
'http://www.example.com' 

Nel codice esempio, il nome host viene analizzato come percorso e non come percorso di rete:

>>> urlparse.urlparse("www.example.com/go") 
ParseResult(scheme='', netloc='', path='www.example.com/go', params='', \ 
    query='', fragment='') 

>>> urlparse.urlparse("http://www.example.com/go") 
ParseResult(scheme='http', netloc='www.example.com', path='/go', params='', \ 
    query='', fragment='') 
+1

Vedo. Avevo l'impressione che l'analisi dell'URL avrebbe determinato in modo intelligente la mancanza di uno schema e ricostruirlo meglio. Risolto il problema semplicemente controllando se la stringa url inizia con "http: //" e aggiungendola di conseguenza. –

+0

@Dan Holman mi aspettavo anche quello, ma se ci pensi, non puoi davvero aspettartelo. Perché "images/tick.png" si riferisce a un percorso relativo, non a un URL completo. Come può urlparse distinguere tra questo e "www.example.com"? Solo perché * sembra * come un nome di dominio non significa che non sia un percorso valido. – mgiuca

1

Se si desidera utilizzare urlparse come si intendeva, l'equivalente "corretto" più vicino è utilizzare "//www.esempio.com" come urlstring. Tale urlstring è inequivocabilmente un percorso assoluto senza schema, quindi è possibile fornire "http" come schema predefinito. Suppongo che si possa fare questo rilevando se il proprio URL include la stringa "//" e, in caso contrario, anteponendo "//" in primo piano.

Problemi correlati