1

これはばかげた質問かもしれませんが、http や https のような URL スキームを宣言せずに urllib2 で URL を取得できますか?

「 http://blahblah.com 」と書く代わりに明確にするために、「blahblah.com」と書きたいだけですが、これは可能ですか?

4

1 に答える 1

0
import urllib2

def open_url_with_default_protocol(*args, **kwargs):
    #  Use the HTTP scheme by default if none is given
    #  pass through all other arguments to urllib2.urlopen

    default_scheme = 'http://'

    url = args[0]
    scheme, address = urllib2.splittype(url)

    if not scheme:
        #  Replace the url in the args tuple by a URL with the default scheme
        args = (default_scheme + args[0],) + args[1:]

    return urllib2.urlopen(*args, **kwargs)

したがって、次のことができます。

>>> open_url_with_default_protocol('http://google.com')
<addinfourl at 4496800872 whose fp = <socket._fileobject object at 0x10bd92b50>>
>>> open_url_with_default_protocol('google.com')
<addinfourl at 4331750464 whose fp = <socket._fileobject object at 0x1027960d0>>

「//google.com」という形式の URL を渡した場合でも、この関数は失敗することに注意してください。これは、スキームがない場合、先頭に二重のスラッシュがないことを前提としているためです。

于 2013-03-20T22:20:34.517 に答える