python庫之urllib

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

  • urlopen(url, data=None, proxies=None, context=None)    
    • url全球資源定位符,data咱們要傳的數據,proxies代理,context爲解決遇到‘https’出現錯誤而設置的,具體爲context = ssl._create_unverified_context()。需導入ssl庫。
_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代理

相關文章
相關標籤/搜索