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报头的方法:
1 | headers = { "User-Agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1" } |
2 | rq = urllib2.Request( "http://www.example.com" ,headers = headers) |
二、自定义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处理。如下面代码: