一.這個模塊裏面主要有這些方法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代理