什么是cookie?
- Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
客户端访问服务器的过程
为什么要使用cookie模拟登陆?
- 有些网站需要登陆后才能访问摸个页面,在登陆之前,我们想访问某个页面内容是不允许的,那么我们可以利用urllib2库保存我们登陆的cookie,然后在利用这个cookie在抓取页面上的信息。
Cookielib模块
- cookielib模块的主要作用是提供可存储cookie的对象,以便与urllib2模块配合使用来访问Internet资源。我们可以利用这个模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登陆功能。
父类 CookieJar
派生 FileCookieJar
派生 MozillaCookieJar LWPCookieJar
获取cookie
import urllib2,urllib
#用来管理cookie的包
import cookielib
url = 'http://www.baidu.com'
cookie = cookielib.CookieJar() #1.创建cookie对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie) #2.创建cookie管理器
opener = urllib2.build_opener(cookie_handler) #3.创建一个新的opener对象
response = opener.open(url) #4.使用opener对象发起请求接收响应
for i in cookie: #查看cookie
print i`
###将cookie保存到文件中去
查看输出:
<Cookie BAIDUID=41667EBB76B45C1525CE362140D100C8:FG=1 for .baidu.com/>
<Cookie BIDUPSID=41667EBB76B45C1525CE362140D100C8 for .baidu.com/>
<Cookie H_PS_PSSID=1437_19036_21118_18560 for .baidu.com/>
<Cookie PSTM=1502460120 for .baidu.com/>
<Cookie BDSVRTM=0 for www.baidu.com/>
<Cookie BD_HOME=0 for www.baidu.com/>
将cookie保存到文件
import urllib2,urllib
#用来管理cookie的包
import cookielib
url = 'http://kaoshi.com:8888/edustu/login/login.spr' #网址已更改
#参数
gold = {
'j_username':'1521231275', #这里我随便写的,可以用火狐firebug查看请求参数
'j_password':'123456',
}
#编码
date = urllib.urlencode(gold)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) '
'Gecko/20100101 Firefox/54.0',
}
#创建request请求对象
request = urllib2.Request(url,data=date,headers = headers) #相当于自己新创建了一个url
filename = 'cookie.txt' #cookie
cookie2 = cookielib.MozillaCookieJar(filename = filename) #1.创建cookie对象
cookie_handler= urllib2.HTTPCookieProcessor(cookie2) #2.创建cookie管理器
opener = urllib2.build_opener(cookie_handler) #3.创建一个新的opener对象
response = opener.open(request) #4.使用opener对象发起请求接收响应
cookie2.save(ignore_discard= True,ignore_expires=True)
查看文件:
save()方法
def save(self, filename=None, ignore_discard=False, ignore_expires=False)
官方解释如下:
ignore_discard: save even cookies set to be discarded.
ignore_expires: save even cookies that have expiredThe file is overwritten if it already exists
ignore_discard的意思是及时cookie将被求其也保存下来
ignore_expires的意思是如果在改文件中cookie已经存在,则覆盖原文件写入
利用cookie文件模拟用户登录
import urllib2
import cookielib
url = 'http://kaoshi.com:8888/edustu/me/edu/meda.spr' #已更改
headler = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) '
'Gecko/20100101 Firefox/54.0',
}
#创建request请求对象
request = urllib2.Request(url,headers = headler)
#创建cookie对象
cookie = cookielib.MozillaCookieJar()
#加载cookie文件
cookie.load(filename='cookie.txt',ignore_discard=True,ignore_expires=True)
#创建cookie管理器
cookie_handler = urllib2.HTTPCookieProcessor(cookie)
#创建open对象
opener = urllib2.build_opener(cookie_handler)
#发送请求
resp = opener.open(request)
print resp.read()
可以看到那到的是登录后的页面源代码
总结:
- 其实现在对于cookie的操作,我也只是限于这些简单的cookie利用,如何更加深入的利用cookie现在还是做不到,等以后更加深入的学习再2继续更新cookie的利用。