urllib模块 | Python 2.7.11

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

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

 

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

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

1.接口:

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

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

    若无法连接,将引发IOError异常;

    若完成连接将返回一个类文件对象,该对象支持以下操作:

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

      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模块
posted @ 2016-04-11 10:09  book丶book丶  阅读(304)  评论(0编辑  收藏  举报