urllib模块 | Python 2.7.11

官方文档: https://docs.python.org/2/library/urllib.htmlhtml

某博客对官方文档较全的翻译: http://h2byte.com/post/tech/relation-bewteen-usllib-and-urllib2?action=show_rawpython

 

提供用于获取互联网上数据的高级接口缓存

打开https URL时不会尝试验证服务器证书服务器

1.接口:网络

  1)urllib.urlopen(url[, data[, proxies[, context]]])函数

    相似于内建函数open(),但接收的不是文件名而是URL;post

    若没法链接,将引起IOError异常;编码

    若完成链接将返回一个类文件对象,该对象支持如下操做:url

      read() , readline() , readlines() , fileno() , close() : 这些函数与文件对象的同名函数有着相同的接口,使用方式与文件对象彻底同样spa

      info() : 返回一个包含与该URL相关联的元信息的mimetools.Message对象,若是是HTTP,则表明从服务器接收到的html文件中的header信息,若是是FTP,则会返回一个内容长度header(?),若是是本地文件,则包含文件最后一次修改时间、文件大小、文件类型等信息

      geturl() : 返回页面的真实URL,一些服务器会将请求重定向到其余的URL,urlopen()会自动处理重定向,geturl()函数能获取到重定向后的URL

      getcode() : 若URL是HTTP类型的则获取响应中的HTTP状态码,不然返回None

    代理.......不懂,待补充

  2)urllib.urlretrieve(url[, filename[, reporthook[, data]]])

    在必要时将该URL表示的网络对象保存到本地文件,若url指向本地文件或有效缓存,则不进行保存

    返回一个tuple (filename, headers),filename是保存的文件名,headers是urlopen().info()返回的信息

    Exceptions与urlopen()的相同

    若是没有指定保存的路径,则保存为临时文件

    reporthook是一个回掉函数,接受三个参数(已接收数据块数,数据块大小(bytes),文件大小)

      在FTP连接中当header不存在Content-Type键时第三个参数文件大小可能为-1

  3)urllib._urlopener ?

  4) urllib.urlcleanup()

    清除以前调用urllib.urlretrieve()所留下的缓存

2. 实用功能

  1)urllib.quote(string[, safe])

    用%xx替换string中的特殊字符,但字母、数字和一些字符('_.-')不会被替换

    一般这个函数针对URL中的路径部分进行替换

    可选参数safe指定不用被替换的字符,默认值是'/'

  2)urllib.quote_plus(string[, safe])

    相似于urllib.quote(),但会用加号'+'替换空格,若加号不包括在safe参数中,string中的加号将会被转义,产生相似HTML表单的数据

  3)urllib.unquote(string)

    urllib.quote()的反函数,将%xx转换成相应的单字符

  4)urllib.unquote_plus(string)

    urllib.quote_plus()的反函数,相似于urllib.unquote(),但会把加号替换成空格

  5)urllib.urlencode(query[, doseq])

    将字典或包含两个元素的元组序列转换成"percent-encoded"(百分比编码?)字符串,使其能被用于urlopen()的可选变量data,主要用于POST请求中传递表单

    转换后的字符串是一系列用'&'分隔开的key=value对,key 和 value 都是用quote_plus()转换过的

  6)urllib.pathname2url(path)

    将本地路径转换为url,过程当中使用了quote()

  7)urllib.url2pathname(path)

    将url转换为本地路径,过程当中使用了unquote()

  8)urllib.getproxies()  ?

3. URL Opener 对象

  1)class urllib.URLopener([proxies[, context[, **x509]]])

    打开和读取URLs的基类;

    URLopener类默认状况下发送urllib/VVV(VVV表明urllib的版本号)的User-Agent header,应用程序能够经过URLopener和FancyURLopener的子类和设置类属性version来定义User-Agent header

    可选参数proxies应该是字典类型描述的proxy URLs, 空字典会将proxy关闭, 默认值为None

    context是一个ssl.SSLContext实例,定义opener打开https连接时的SSL

    附加关键字参数用于创建https连接中传送SSL key 和 certificate

    当服务器返回错误码时会引起IOError异常

      open(fullurl[, data])

        用适当的协议打开fullurl

        该方法设置缓存和代理信息后调用合适的open方法,若是方案未能识别,则调用open_unknown()

        data参数的意义与urlopen()中的data参数意义相同

      open_unknown(fullurl[, data])

        重写接口,打开未知类型的URL

      retrieve(url[, filename[, reporthook[, data]]])

      version

        该变量为opoener对象指定一个user agent,在子类中做为类变量设置或者在构造函数中设置

  2)class urllib.FancyURLopener(...)

    FancyURLopener是URLopener的子类,定义了处理http状态码301, 302, 303, 307 和 401的方法

4. urllib的局限

  当前仅支持HTTP,FTP和本地文件
  urlretrieve的caching特性被禁用了(until I find the time to hack proper processing of Expiration time headers.))
  可能会反复等待一个链接创建而引发长延时
  对待ftp的文件和目录,采用了不一样的策略,可能会引发一些问题.做者建议使用ftplib模块,或者继承FancyOpener来改写.
  不支持须要认证的代理
  URL的处理建议使用urlparser模块
相关文章
相关标签/搜索