_urlopener=None
def urlopen(url, data=None, proxies=None):
"""Create a file-like object for the specified URL to read from."""
from warnings import warnpy3k
warnpy3k("urllib.urlopen() has been removed in Python 3.0 in "
"favor of urllib2.urlopen()", stacklevel=2)
global_urlopener
if proxies is not None:
opener=FancyURLopener(proxies=proxies)
elif not _urlopener:
opener=FancyURLopener()
_urlopener=opener
else:
opener=_urlopener
if data is None:
return opener.open(url)
else:
return opener.open(url, data)
下面分析urllib里的urlopen(),使用urllib.urlopen()方法会生成一个FancyURLopener类的对象,而FancyURLopener类是URLopener类的子类,那么这个类对象直接调用URLopener类的open(url)方法就行了,对于使用者来说,urllib.urlopen()的使用方式更易于使用,但这只是初步使用上简单,在深度使用后,urllib就没有urllib2结构清晰了。