网页cookie的使用
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
# opener的概念
当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。
如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置
# Cookielib
cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
关系:CookieJar —- 派生—->FileCookieJar —- 派生 —–> MozillaCookieJar和LWPCookieJar
1. 获取Cookie保存到变量
利用CookieJar对象实现获取cookie的功能,存储到变量中
# 例子
import urllib2 import cookielib cookie = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(handler) response = opener.open("http://www.baidu.com") for item in cookie: print ("Name=" + item.name) print ("Value=" + item.value)
2. 保存Cookie到txt文件
将cookie保存到了cookie这个变量中,使用FileCookieJar的子类MozillaCookieJar来实现Cookie的保存
import urllib2 import cookielib filename = "cookie.txt" # 设置保存cookie的文件 cookie = cookielib.MozillaCookieJar(filename) # 声明一个MozillaCookieJar对象实例来保存cookie handler = urllib2.HTTPCookieProcessor(cookie) # 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器 opener = urllib2.build_opener(handler) # 通过handler来构建opener response = opener.open("http://www.baidu.com") # 创建一个请求,原理同urllib2的urlopen cookie.save(ignore_discard=True,ignore_expires=True) # 保存cookie到文件
注:ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入
3. 从文件中获取Cookie并访问
import urllib2 import cookielib cookie = cookielib.MozillaCookieJar() cookie.load("cookie.txt",ignore_discard=True,ignore_expires=True) request = urllib2.Request("http://www.baidu.com") opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open(request) print (response.read())
4. 利用cookie模拟网站登录163邮箱
利用cookie实现模拟登录,并将cookie信息保存到文本文件中。
# eg_v1 import urllib import urllib2 import cookielib filename = "163mail.txt" cookie = cookielib.MozillaCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) postdata = urllib.urlencode({"email":"15800220134","password":"abc123456"}) loginURL = "http://mail.163.com/" result = opener.open(loginURL,postdata) cookie.save(ignore_discard=True,ignore_expires=True) gradeURL = "http://mail.163.com/js6/main.jsp?sid=VDTWzvRRwIKUKIMaBmRRejDfKwRnmmNM&df=mail163_letter#module=welcome.WelcomeModule%7C%7B%7D" result1 = opener.open(gradeURL) print (result1.read()) # eg_v2 import urllib import urllib2 def post(url,data): request = urllib2.Request(url) data = urllib.urlencode(data) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) response = opener.open(request,data) return response.read() def main(): posturl = "http://mail.163.com" data = {"email":"15800220134","password":"abc123456"} print (post(posturl,data)) if __name__ == "__main__": main()