python库之urllib

一.这个模块里面主要有这些方法

__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:

  • 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

  •     

猜你喜欢

转载自my.oschina.net/u/3298130/blog/1633662