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,未找到文件时返回404u.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