7

URLを「クリーン」にするために何かを書いています。この場合、私がやろうとしているのは、偽のスキームを返すurlopenことだけです。これがないと機能しません。ただし、これをでテストすると、www.python.orgが返されますhttp:///www.python.org。なぜ余分な/を知っている人はいますか?それなしでこれを返す方法はありますか?

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
4

2 に答える 2

9

問題は、非常に不完全なURLを解析する際に、指定www.python.orgした文字列が実際にpathはURLのコンポーネントとして使用され、netloc(ネットワークの場所)1つが空であるということです。スキームをデフォルトにするために、実際に2番目のパラメーターschemeurlparse(ロジックを単純化して)渡すことができますが、それは「空のnetloc」問題には役立ちません。したがって、その場合にはいくつかのロジックが必要です。

if not netloc:
    netloc, path = path, ''
于 2010-09-26T14:55:10.697 に答える
1

これは、urlparseが「www.python.org」をホスト名(netloc)としてではなく、ブラウザがhref属性でその文字列を検出した場合と同じようにパスとして解釈しているためです。次に、urlunparseはスキーム「http」を特別に解釈するようです。スキームとして「x」を入力すると、「x:www.python.org」が表示されます。

処理している入力の範囲はわかりませんが、urlparseとurlunparseは必要ないようです。

于 2010-09-26T14:56:17.777 に答える