zoukankan      html  css  js  c++  java
  • 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模块
  • 相关阅读:
    查看Android应用所需权限(uses-permission)
    Android Camera后台拍照
    傅里叶变换
    linux文件系统问题:wrong fs type, bad option, bad superblock
    H3 android 系统编译
    开源股票数据工具
    获取股票实时交易数据的方法
    获取历史和实时股票数据接口
    CRC在线计算工具
    硬盘自动挂载
  • 原文地址:https://www.cnblogs.com/book-book/p/5377273.html
Copyright © 2011-2022 走看看