2011-12-02 9 views

答えて

36

のPython 2

あなたはURLを解析しurlparseモジュールを使用することができますし、それがすることにより、相対的または絶対的だならば、あなたは確認することができますホスト名が設定されているかどうかを確認します。

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

urlparseurllib.parseに移動するので、以下を使用されています:

from urllib.parse import urlparse 

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

'www.example.com/some/path'もaboluteとしてカウントしてはいけませんか? – Geo

+1

正式には、文字列全体をパスとする相対URLです。絶対値として数えたい場合は、いくつかの前処理によって 'http://'を追加するか、 'urlparse'を使用しないでください。 –

+2

RFCによると '// google.com'はプロトコル相対URLです。そしてあなたのコードは 'False'を返します。 – Nik

17

あなたはURLがベースURLとそれに参加するために、絶対的または相対的であるかどうかを知りたい場合は、私は通常、とにかく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

をこれは私がやりたいことであることが判明 - それは、2番目のURLのすべての未指定部分のデフォルトとして最初のURLを扱います。第2のものが絶対的なものであれば、それはちょうどそのものを使用します。 – rescdsk

-1

ないについて、あなたは求めているものを確認してください。 http://で始まるかどうかを調べるだけですか? そうなら、シンプルな正規表現がこのトリックを行います。

(EDIT:下記のコメントを参照してください - 非常に良い点を!!)

+3

文字列が既知の接頭辞で始まるかどうかを確認するためだけに正規表現を使用しないでください。文字列の 'startswith'メソッドを使用してください。 –

+0

また、URLのチェックは、特定のプレフィックスをチェックするよりも少し複雑です。 – rplnt

1

は受け入れ答えをコメントので、新しい答えとして、このコメントを書き込むことができません:IMOスキームをチェックします受け入れられた回答(bool(urlparse.urlparse(url).scheme))は、http://example.com/file.jpghttps://example.com/file.jpg、//example.com/file.jpgは絶対URLですが、最後にはスキーム= ''

私はこのコードを使用

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

+0

AFAIK // foo/barは有効な相対URLです。 「相対的」とは「スキームとネットロックなし」を意味します。 – guettli

関連する問題