一、Cookie登录简介
Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能。基本所有的网站,我们都可以通过操作Cookie来进行模拟登录,所以我们只要通过灵活的操作Cookie就可以实现登录!
二、为什么要登录
在很多时候,一些网站要求我们登录之后才能访问或者我们需要通过爬虫抓取我们的个人信息,比如当前一些查询公积金和社保的APP等。他们都可以根据用户提供的账号密码模拟登录公积金网站进行查询然后进行授权管理!
三、Cookielib/cookiejar操作cookies
Python 3.*用urllib.request来代替原来的urllib2,因此调用的时候改为import urllib.request,同时cookielib也被http.cookiejar取代。cookielib/cookiejar模块的主要作用是提供可存储cookie的对象,以便于与urllib模块配合使用来访问Internet资源。
1、获取Cookie保存到变量
为了考虑到个版本的兼容,我们这里优化了一些代码,大家使用可以直接使用即可,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中
import urllib2,cookielib
# python3环境
# import urllib.request as urllib2
# import http.cookiejar as cookielib
# 声明一个CookieJar对象来保存cookie
cookie = cookielib.CookieJar()
# 创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 构建opener
opener = urllib2.build_opener(handler)
# 创建请求,类似urllib2中的urlopen/request
response = opener.open('')
for item in cookie:
print('name:' + item.name + '-value:' + item.value)
2、将Cookie保存到文件中
上面我们已经获取到了cookies信息,我们可以通过FileCookieJar的子类MozillaCookieJar将cookie信息保存在文件中方便我们后续使用。
import urllib2,cookielib
# python3环境
# import urllib.request as urllib2
# import http.cookiejar as cookielib
# 设置保存cookie的文件,当前为同级目录的cookie.txt
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
# 创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 构建opener
opener = urllib2.build_opener(handler)
# 创建请求
response = opener.open("")
# 保存cookie到cookie.txt文件
cookie.save(ignore_discard=True, ignore_expires=True)
3、从文件中获取Cookie并访问
上面我们已经将Cookie保存到cookie.txt文件中,我们可以利用load方法来读取cookie并添加到我们Http请求中。
import urllib2,cookielib
# python3环境
# import urllib.request as urllib2
# import http.cookiejar as cookielib
cookie = cookielib.MozillaCookieJar()
# 从文件中读取cookie内容到变量
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
# 创建请求的request
req = urllib2.Request("")
# 使用build_opener方法创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
print response.read()
四、利用cookie模拟网站登录
注意
通过这里我们可以了解到,有一些网站登录加密算法非常麻烦;我们需要花费大量时间来编写登录爬虫。如果面对不常用或者一次性的爬虫,我们可以直接通过浏览器登录网站后,直接使用cookies来编写我们的爬虫即可,非常方便。
在这里我们cookie模拟登录
import urllib2,cookielib
# python3环境
# import urllib.request as urllib2
# import http.cookiejar as cookielib
filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
'stuid':'00131012',
'pwd':'23342321'
})
#登录教务系统的URL
loginUrl = 'http://jwxt.:7890/pls/wwwbks/bks_login2.login'
#模拟登录,并把cookie保存到变量
result = opener.open(loginUrl,postdata)
#保存cookie到cookie.txt中
cookie.save(ignore_discard=True, ignore_expires=True)
#利用cookie请求访问另一个网址,此网址是成绩查询网址
gradeUrl = 'http://jwxt.:7890/pls/wwwbks/bkscjcx.curscopre'
#请求访问成绩查询网址
result = opener.open(gradeUrl)
print result.read()