2011-09-02 11 views
7

指定されたURL文字列の前に 'http'スキーム名を追加したい場合は、それを追加します。さもなければ、私はurlparseがこれを行う正しい方法だと思ったので、urlだけを残しておいてください。しかし、スキームがなくてURLを取得する場合は、スキームとドメインの間に「//」の代わりに///を付けます。urlparse.urlparseスキームの後に2の代わりに3 '/'を返す

それが実際のように見えるので、私はこのURLを変換するにはどうすればよい
>>> t = urlparse.urlparse('www.example.com', 'http') 
>>> t.geturl() 
'http:///www.example.com' # three /// 

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

答えて

4

短い答え(それは少しトートロジーです):あなたのサンプルコードで

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

ホスト名、ネットワークロケーションではないパスとして解析されます:

>>> 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

です。私は、url構文解析がスキームの欠如を賢明に判断し、それをより良く再現するという印象を受けました。 URL文字列が 'http://'で始まるかどうかを確認し、それに応じて追加することで修正しました。 –

+0

@ダン・ホルマン私はそれも期待していましたが、もしそれについて考えるなら、あなたはそれを本当に期待することはできません。 "images/tick.png"は絶対パスではなく相対パスを参照するためです。 urlparseはそれと "www.example.com"をどのように区別できますか?ドメイン名のように見えるだけで、それは有効なパスではありません。 – mgiuca

1

あなたが意図していた通りにurlparseを使いたい場合、最も近い "正しい"同等のものはurlstringとして "//www.example.com"を使うことです。そのようなurlstringはスキームのない絶対パスであるため、デフォルトスキームとして "http"を指定することができます。あなたのURLに文字列 "//"が含まれているかどうかを検出し、そうでない場合は "//"を前面に付けることでこれを行うことができます。

関連する問題