Python urllib和urllib2模块学习(二)
一、urllib其它函数
前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍。当然 urllib 还有一些其它很有用的辅助方法,比如对 url 进行编码、解码等等。
辅助方法:
1. urllib.quote(string[,safe]) : 对字符串进行编码,参数safe指定了不需要编码的字符;
urllib.unquote(string): 对字符串进行解码;
2. urllib.urlencode(query[,doseq]): 将dict或都包含两个元素的元组列表转换成url参数。
例如:
>>> dict1 = {'name':'baidu','Local':'CD'}
>>> data = urllib.urlencode(dict1)
>>> print data
Local=CD&name=baidu
3. urllib.pathname2url(path): 将本地path转换成url路径
urllib.url2pathname(path): 将url路径转换成本地路径
二、urllib与urllib2的区别:
urllib 和 urllib2 都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:
- urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。
- urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
三、urllib2常用函数:
1.urllib2.urlopen()方法
即可以接受一个字符串型的 url 地址或者一个 Request 对象。将打开这个 url 并返回结果为一个像文件对象一样的对象.
urlopen()是最简单的请求方式,它打开url并返回类文件对象,并且使用该对象可以读取返回的内容。参数url可以是包含url的字符串,也可以是urllib2.request类的实例。data是经过编码的post数据(一般使用urllib.urlencode()来编码)。timeout是可选的超时期(以秒为单位),供所有阻塞操作内部使用。
常用方法:
1. read(),readline(),readlines(): 以字节字符串形式读取(nbytes个数据、单行、返回一个列表)
2.getcode(): 返回整数形式的HTTP响应代码,比如成功返回200,未找到文件时返回404
3.info() : 返回映射对象,该对象带有与url关联的信息,对HTTP来说,返回的服务器响应包含HTTP包头。
2. urllib2.Request()方法
语法:Request (url [data,headers [,origin_req_host ,[unverifiable]]]])
对于比较简单的请求,urlopen()的参数url就是一个代表url的但如果需要执行更复杂的操作,如修改HTTP报头,可以创建Request实例并将其作为url参数。
新建Request实例。url为url字符串,data是伴随url提交的数据(比如要post的数据)。不过要注意,提供data参数时,它会将HTTP请求从'GET'改为‘POST’。headers是一个字典,包含了可表示HTTP报头的键值映射(即要提交的header中包含的内容)。originreqhost通常是发出请求的主机的名称,如果请求的是无法验证的url(通常是指不是用户直接输入的url,比如加载图像的页面中镶入的url),则后一个参数unverifiable设为TRUE。
假设Request实例r,其比较重要的方法有下面几个:
- r.add_data(data) 向请求添加数据。如果请求是HTTP请求,则方法改为‘POST’。data是向指定url提交的数据,要注意该方法不会将data追教导之前已经设置的任何数据上,而是使用现在的data替换之前的。
- r.add_header(key, val) 向请求添加header信息,key是报头名,val是报头值,两个参数都是字符串。
- r.addunredirectedheader(key, val) 作用基本同上,但不会添加到重定向请求中。
- r.set_proxy(host, type) 准备请求到服务器。使用host替换原来的主机,使用type替换原来的请求类型。