第四节&保存cookie值模拟登录

1.Cookie

Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。

原理

HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:

Cookie名字(Name)
Cookie的值(Value)
Cookie的过期时间(Expires/Max-Age)
Cookie作用路径(Path)
Cookie所在域名(Domain),
使用Cookie进行安全连接(Secure)。

前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。

Cookie由变量名和值组成,根据 Netscape公司的规定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

应用

Cookies在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

2.cookielib库 和 HTTPCookieProcessor处理器

在Python处理Cookie,一般是通过http.cookiejar模块和 urllib.request模块的HTTPCookieProcessor处理器类一起使用。

http.cookiejar模块:主要作用是提供用于存储cookie的对象

HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。

http.cookiejar 库

该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

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

    FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。

    MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

    LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。

其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()

人人网模拟登录

#保存cookie值模拟登录
import urllib.request as urllib2
import http.cookiejar as cookielib
import urllib


#通过cookieJar()类构建一个cookiejar()对象,用来保存cookie的值
cookie = cookielib.CookieJar()

#通过HTTPCookieProcessor()处理器构建一个处理器对象,用来处理cookie
#参数就是构建的CookieJar()对象
cookie_handler = urllib2.HTTPCookieProcessor(cookie)

#构建一个自定义的opener
opener = urllib2.build_opener(cookie_handler)

#自定义opener的addheaders的参数,可以赋值HTTP报头参数
opener.addheaders = [('User_Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0')]

#renren网的登录接口
url = 'http://www.renren.com/PLogin.do'

data = {'email':'账号','password':'密码'}

#通过urlencode()编码转换
data = urllib.parse.urlencode(data).encode('utf-8')

#第一次是post请求,发送登录需要的参数,过去cookie
request = urllib2.Request(url,data = data)

#发送第一次的post请求,生成登录后的cookie(如果登录成功的话)
response = opener.open(request)

#第二次可以是get请求,这个请求将保存生成cookie一并发送到web服务器,服务器会验证cookie通过
#response2 = opener.open('http://www.renren.com/971537428')

#获取登陆后才能访问的页面信息
html = response.read().decode(encoding='utf-8')

html = response.read().decode(encoding='utf-8')

print(html)

with open('renren.html','w',encoding='utf-8') as f:
	f.write(html)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值