一.这个模块里面主要有这些方法this
__all__ = ["urlopen", "URLopener", "FancyURLopener", "urlretrieve", "urlcleanup", "quote", "quote_plus", "unquote", "unquote_plus", "urlencode", "url2pathname", "pathname2url", "splittag", "localhost", "thishost", "ftperrors", "basejoin", "unwrap", "splittype", "splithost", "splituser", "splitpasswd", "splitport", "splitnport", "splitquery", "splitattr", "splitvalue", "getproxies"]
1.urlopen:url
_urlopener = None # 将_urlopener设为None def urlopen(url, data=None, proxies=None, context=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 # 有无global的区别,若是不须要修改值,能够不添加,但若是须要修改值,需添加 # 首先判断proxies和context是否存在,若是都存在那么将参数传给FancyURLopener if proxies is not None or context is not None: opener = FancyURLopener(proxies=proxies, context=context) # 原来我在这一直存在误解_urlopener初始值为None,not _urlopener就是True。一直觉得是False elif not _urlopener: # 将FancyURLopener的值赋值给opener,原来一直疑惑为何不直接赋值给_urlopener ,后边才发现原来是要返回这个值 # FancyURLopener这是处理异常的派生类 opener = FancyURLopener() _urlopener = opener else: # _urlopener的值是什么? opener = _urlopener # 判断data是否为空,调用open()方法。 if data is None: return opener.open(url) else: return opener.open(url, data)
2.urlretrieve代理