python学习笔记 - urllib2和cookielib模块心得


urllib2模块


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


urllib2常用的方法:

  • urlopen(url, [,data, [timeout]])

urlopen()是最简单的请求方式,它打开url并返回类文件对象,并且使用该对象可以读取返回的内容。参数url可以是包含url的字符串,也可以是urllib2.request类的实例。data是经过编码的post数据(一般使用urllib.urlencode()来编码)。timeout是可选的超时期(以秒为单位),供所有阻塞操作内部使用。

假设urlopen()返回的文件对象u,它支持下面的这些常用的方法:

u.read([nbytes])
以字节字符串形式读取nbytes个数据

u.readline()
以字节字符串形式读取单行文本

u.readlines()
读取所有输入行然后返回一个列表

u.close()
关闭链接

u.getcode()
返回整数形式的HTTP响应代码,比如成功返回200,未找到文件时返回404

u.geturl()
返回所返回的数据的实际url,但是会考虑发生的重定向问题

u.info()
返回映射对象,该对象带有与url关联的信息,对HTTP来说,返回的服务器响应包含HTTP包头。对于FTP来说,返回的报头包含'content-length'。对于本地文件,返回的报头包含‘content-length’和'content-type'字段。

要注意的是,类文件对象u以二进制模式操作。如果需要以文本形式处理响应数据,则需要使用codecs模块或类似方式解码数据。

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

  • 自定义Opener

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

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


cookielib模块


cookielib模块的主要作用是提供可储存的cookie对象,以便与urllib2模块配合使用来访问那些需要cookie才能访问的资源(比如大部分网站登陆是需要指定的cookies的),例如可以使用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。cookielib模块用到的对象主要有下面几个:CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

这里只介绍一下CookieJar,因为这个对象一般使用的频率最高。

  • CookieJar()

管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。

举个简单的例子:

1
2
3
4
5
6
7
8
9
#获取CookieJar实例
cj = cookielib.CookieJar()
#自定义opener,并将opener跟CookieJar实例绑定
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#安装自定义的opener,此后调用urlopen()时都会使用安装过的opener对象
urllib2.install_opener(opener)
 
url = "www.baidu.com"
urllib2.urlopen(url)

这样就可以在第一次打开指定的url时获得所需要cookies,再次使用urlopen()打开url时就会附带这些cookies,CookieJar会智能的帮你管理那些cookies,所以你不需要关心太多的细节。


转载自http://brotherdong.diandian.com/post/2013-05-04/40050395791

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值