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替换原来的请求类型。

  

  

 

posted @ 2015-04-24 15:12  沉默的云  阅读(289)  评论(0编辑  收藏  举报