首页 > 技术文章 > python库(3)—— urllib

zhangjing327 2013-12-30 18:41 原文

1、该模块的用途
  从制定的URL获取数据
  对URL字符串进行格式化处理

2、urllib.urlopen(url, data=None, proxies=None)
  打开一个由url指定的网络对象
  参数
    url:符合URL规范的字符串(包括http,ftp,gopher,local-file标准)
    data:向指定的URL发送的数据字符串,GET和POST都可,但必须符合标准格式,格式为key=value&key1=value1....
    proxies:代理服务器地址字典,如果未指定,在WINDOWS平台上则依据IE的设置,不支持需要验证的代理服务器。例如:proxies = {'http': 'http://www.someproxy.com:3128'},表示一个http代理服务器http://www.someproxy.com:3128
  返回值
    返回一个类似文件对象的对象(file_like)object;该对象拥有的方法为read()、readline()、readlines()、fileno()、close(),以上方法同file object的类似方法的使用方法基本一致;其他的方法,info()返回从服务器传回的MIME标签头,geturl()返回真实的URL,之所以称为真实,是因为对于某些重定向的URL,将返回被重定后的。

3、urllib.urlretrieve(url, filename=None, reporthook=None, data=None)
  打开一个由url指定的网络对象,该函数一旦执行,立即将URL返回的数据将保存到指定文件中(数据是html);与urlopen的区别是,不会返回一个对象,但是会直接获取数据,不需要read
  参数:
    url:符合URL规范的字符串
    filename:本地文件路径的字符串,从URL返回的数据将保存在该文件中,如果设置为None则生成一个临时文件
    reporthook:一个函数引用,自己可以任意定义该函数的行为,只需要保证函数有三个参数;urlretrieve为这个函数传递的三个参数的含义为:第一个参数为目前为止传递的数据块数量,第二个参数为每个数据块的大小,单位为byte,第三个参数文件总的大小(某些时候可能为-1)
    data:向指定的URL发送的数据字符串,GET和POST都可,但必须符合标准格式,格式为key=value&key1=value1....
  返回值
    返回一个元组 (filename, headers),filename为参数中的filename,headers为从服务器传回的MIME标签头

4、urllib.urlcleanup()
  清除使用urlopen或urlretrieve后产生的缓存文件,无返回值

5、urllib.quote(s, safe = '/')
  根据rfc 2396规定,URL保留字符为reserved= ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |"$" | "," 。但是这些字符并不是在所有类型的URL中都保留不转化,所以要求使用该函数的时候在转化不同的URL时设置不同的保留字符,其中在任意部分都不转化的字符为:大小写字母,数字,'_','.','-' 。对于汉字,也可以使用,但要加上相应的编码,比如quote(u'蟒蛇'.encode('gb2312')) 。该函数会将所有非保留的字符转化成%xx这样的形式,其中xx为两位的十六进制数
  参数
    s:需要转化的字符串
    safe:需要保留不转化的字符序列
  返回值
    转化后的字符串

6、urllib.unquote(s)
  与quote作用相反的解析函数
  参数
    s:需要反向转化的字符串
  返回值
    转化后的字符串

7、urllib.quote_plus(s, safe = '')
  与quote函数基本一致,只是把参数s中的空格转化成'+',而不是%20
  参数
    s:需要转化的字符串
    safe:需要保留不转化的字符序列
  返回值:
    转化后的字符串

8、urllib.unquote_plus(s)
  与quote_plus作用相反的解析函数
  参数
    s:需要反向转化的字符串
  返回值
    转化后的字符串

9、urllib.urlencode(query,doseq=0)
  将成对的数据按照URL中的要求组成一个参数字符串
  例如:

        query = (('name','cs'),('age','1'),('height','2'))
        re = urllib.urlencode(query)
        print re
        query1 = {'name':'cs','age':'1','height':'2'}
        print urllib.urlencode(query1)
        #这两个的效果基本一样,但字典类型会自动排序,
        #输出结果为:
        name=cs&age=1&height=2
        age=1&name=cs&height=2

    doseq参数的意义,文档太简短,尝试了一下,发现在如何字符串化上不同

        query1 = {'name':'cs','age':('a','b'),'height':'1'}
        print urllib.urlencode(query1,1)
        print urllib.urlencode(query1,0)
       # 输出结果为:
        age=a&age=b&name=cs&height=1
        age=%28%27a%27%2C+%27b%27%29&name=cs&height=1    

  参数
    query:可以是一个由二元元组做元素的元组,也可以是一个字典
    doseq:如何对参数字符串化
  返回值
    经过拚接的参数字符串

推荐阅读