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:如何对参数字符串化
返回值
经过拚接的参数字符串