urllib2模块、cookielib模块

上一篇 / 下一篇  2013-07-02 11:12:14 / 个人分类:python 模块学习


转自:http://my.oschina.net/duhaizhang/blog/69342


urllib2模块、cookielib模块

1人收藏此文章我要收藏发表于11个月前(2012-07-27 11:26) , 已有754次阅读 ,共0个评论

                                                                     urllib2模块

      urllib模块和urllib模块类似,用来打开URL并从中获取数据。与urllib模块不同的是,urllib模块不仅可以使用urlopen()函数还可以自定义Opener来访问网页。同时要注意:urlretrieve()函数是urllib模块中的,urllib2模块中不存在该函数。但是使用urllib2模块时一般都离不开urllib模块,因为POST的数据需要使用urllib.urlencode()函数来编码。

      一、urlopen()

            最简单的请求方式就是用urlopen()函数。

            urlopen (url [,data ,[timeout]]) 函数打开URL url并返回类文件对象,使用该对象可以读取返回的内容。其中,参数url 可以是包含URL的字符串,也可以是urllib2.Request类的实例。data是经过编码的POST数据(一般使用urllib.urlencode()来编码)。timeout是可选的超时期(以秒为单位),供所有阻塞操作内部使用。

          注意timeout参数,是超时时间,即在中断连接前尝试的时间,但只对HTTP、HTTPS、FTP、FTPS有效。设置超时时间,通过urlopen()函数设置是最简单的方法,还可以通过socket模块或urllib2模块来设置(socket.setdefaulttimeout(10)或urllib2.socket.setdefaulttimeout(10))。详细代码参考《urllib2的使用细节》.

           urlopen()返回的类文件对象u支持一下方法:

 

          对于简单的请求,urlopen()的参数url就是一个代表URL的字符串。但如果需要执行更复杂的操作,如修改HTTP报头,可以创建Request实例并将其作为url参数。

         Request (url [data,headers [,origin_req_host ,[unverifiable]]]])

         Request实例r具有的方法中重要的有以下几个:

       下面代码示例使用Request来更改urlopen()使用的User-Agent报头的方法:

1headers={"User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
2rq=urllib2.Request("http://www.example.com",headers=headers)
3u=urlopen(rg)

       

 二、自定义Opener

          基本的urlopen()函数不支持验证、cookie或其他HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。

          install_opener(opener)  安装opener作为urlopen()使用的全局URL opener,即意味着以后调用urlopen()时都会使用安装的opener对象。opener通常是build_opener()创建的opener对象。

复杂情况详细解决办法:

1、cookie处理

          如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。如下面代码:


TAG:

 

评分:0

我来说两句

Open Toolbar