首页 > 编程语言 >Python3网络爬虫教程6——cookie & session(cookie的属性,保存及模块的使用)

Python3网络爬虫教程6——cookie & session(cookie的属性,保存及模块的使用)

时间:2023-01-31 13:35:12浏览次数:45  
标签:__ http handler request session cookie 浏览器 Python3


Python 全栈工程师核心面试 300 问深入解析(2020 版)----全文预览
Python 全栈工程师核心面试 300 问深入解析(2020 版)----欢迎订阅

上接:
Python3网络爬虫教程5——ProxyHandler处理(代理服务器和代理IP)

4. cookie & session

  • 产生的原因:
  • 由于HTTP协议没有记忆性,人们为了弥补这个缺陷,所采用的一个补充协议
  • cookie是发放给用户(即http浏览器)的一段信息,session是保存在服务器上的
  • 对应的另一半信息,用来记录用户的信息
  • cookie和session的区别
  • 存放位置不同
  • cookie不安全
  • session会保存在服务器上一段时间,有一定的期限,会过期
  • 单个cookie数据不超过4KB,很多浏览器限制一个站点最多保存20个
  • session的存放位置
  • 存在服务器端
  • 一般情况,session是放在内存中或者数据库中
  • 没有cookie登陆,模拟登陆人人网
  • 看案例43_11
  • 没有cookie的登陆,返回的网页为未登陆状态,自动跳转到登陆首页
    案例 43_11
# 没有cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页

import chardet
from urllib import request

if __name__ == '__main__':

# 个人人人网登陆后的个人主页
url = 'http://www.renren.com/574862780'
rsp = request.urlopen(url)
html = rsp.read().decode('UTF-8')
# 将打开的网页保存为html文件,然后浏览器打开
with open('43_11_rsp.html', 'w') as f:
f.write(html)
  • 使用cookie登陆人人网
  • 直接将网页中的cookie复制下来,然后手动放入请求头
  • 看案例43_12
    案例 43_12
# 使用cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页
# 复制已登录的主页中的cookie信息到请求头中
# 注意cookie有时效性,第二天再次使用可能cookie已经失效

import chardet
from urllib import request

if __name__ == '__main__':

# 个人人人网登陆后的个人主页
url = 'http://www.renren.com/969464538/profile'
headers = {'Cookie': 'anonymid=jqz93aa61j2ebq; depovince=ZGQT; _r01_=1; JSESSIONID=abcCDVfle7EH5eGmyXAHw; ick_login=2c2236f7-9001-4b87-8f7a-4d1ef7936834; t=0c73459378e50f6e3ee47ae345e53ff28; societyguester=0c73459378e50f6e3ee47ae345e53ff28; id=969464538; xnsid=a53a566e; jebecookies=f50fc9af-aab9-4b0e-ba46-2f6662e91791|||||; ver=7.0; loginfrom=null; wp_fold=0'}
req = request.Request(url, headers=headers)
rsp = request.urlopen(req)
html = rsp.read().decode()
# 将打开的网页保存为html文件,然后浏览器打开
with open('43_12_rsp.html', 'w') as f:
f.write(html)
  • cookie模块
  • http模块包含一些关于cookie的模块,通过他们我们可以自动使用cookie
  • CookieJar
  • 管理存储cookie,向传出的http请求头添加cookie
  • cookie存储在内存中,CookieJar实例回收后cookie将消失
  • FileCookieJar(filename, delayload=None, policy=None)
  • 使用文件管理cookie
  • filename是保存cookie的文件
  • MozillaCookieJar(filename, delayload=None, policy=None)
  • 创建与Mozilla浏览器cookie.txt兼容的FileCookie案例
  • LwpCookieJar(filename, delayload=None, policy=None)
  • 创建与libwww-perl标准兼容的Set-Cookie3格式的FileCookieJar实例
  • 他们关系是:CookieJar–>FileCookieJar–>MozillaCookieJar&LwpCookieJar
  • 利用CookieJar访问人人网
  • 看实例43_13
  • 自动使用cookie登陆的流程
  • 打开登陆页面后自动通过用户密码登陆
  • 自动提取反馈回来的cookie
  • 利用提取的cookie登陆隐私页面
  • 案例中的handler是Handler的实例,常规用法参考实例
    案例 43_12
# 使用cookie登陆,模拟登陆人人网
# 先登陆自己人人网个人主页,复制主页的网址,
# 如果关闭浏览器后再次打开浏览器,粘贴网址,由于浏览器保存了cookie信息,会进入到个人主页
# 个人主页地址复制到另外一台电脑登陆或者另外一个浏览器,由于没有cookie登陆会跳转到人人网主页
# 复制已登录的主页中的cookie信息到请求头中
# 注意cookie有时效性,第二天再次使用可能cookie已经失效

import chardet
from urllib import request

if __name__ == '__main__':

# 个人人人网登陆后的个人主页
url = 'http://www.renren.com/969464538/profile'
headers = {'Cookie': 'anonymid=jqz93aa61j2ebq; depovince=ZGQT; _r01_=1; JSESSIONID=abcCDVfle7EH5eGmyXAHw; ick_login=2c2236f7-9001-4b87-8f7a-4d1ef7936834; t=0c73459378e50f6e3ee47ae345e53ff28; societyguester=0c73459378e50f6e3ee47ae345e53ff28; id=969464538; xnsid=a53a566e; jebecookies=f50fc9af-aab9-4b0e-ba46-2f6662e91791|||||; ver=7.0; loginfrom=null; wp_fold=0'}
req = request.Request(url, headers=headers)
rsp = request.urlopen(req)
html = rsp.read().decode()
# 将打开的网页保存为html文件,然后浏览器打开
with open('43_12_rsp.html', 'w') as f:
f.write(html)
# 生成cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handler = request.HTTPHandler()
# 生成https管理器
https_handler = request.HTTPSHandler()

- 创建handler之后,使用opener打开,打开后相应的业务由相应的handler处理
- 将cookie作为一个变量打出来
- 参考案例43_14
- cookie的属性
- name: 名称
- value: 值
- domain: 可以访问此cookie的域名
- path: 可以访问此cookie的页面路径
- expires: 过期的时间
- size:大小
- http字段

- cookie的保存
- 使用FileCookieJar
- 参考案例43_15

- cookie的读取
- 使用cookie.load('cookie.txt')

案例 43_14

# 将cookie打印出来
# 看看cookie里面有什么

from urllib import request, parse
from http import cookiejar

# 创建cookiejar的实例
cookie = cookiejar.CookieJar()
# 生成cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handler = request.HTTPHandler()
# 生成https管理器
https_handler = request.HTTPSHandler()
# 创建请求管理器
opener = request.build_opener(http_handler, https_handler, cookie_handler)

# 初次登录,验证后给我们cookie
def login():
'''
负责初次登录
需输入用户名和密码,用来获取cookie凭证
'''
# 登录用户地址,进入人人网登录首页,查看网页源码
# 网页源码中打开查找,查找“下次自动登录”
# 然后向上找form,里面就有login-form
url = 'http://www.renren.com/PLogin.do'

# 此键值需要从登录form的对应两个input中提取name属性
data = {
'email': '[email protected]',
'password': 'zfb123456'
}

# 把数据进行编码
data = parse.urlencode(data)

# 创建一个请求对象
req = request.Request(url, data=data.encode())

# 使用opener发起请求,会自动提取我的cookie
rsp = opener.open(req)


if __name__ == '__main__':
# 如果已经执行了login,则opener则自动已经包含了相应的cookie值
login()
# 我们将cookie打印出来,可以采用访问字典的方式访问
print(cookie)
for item in cookie:
print(type(cookie))
print(item)
# 获取item的属性
print(dir(item))
# 把最后一个item里面所有的变量打印出来
for i in dir(item):
print(i)

案例 43_15

# 将获取到的cookie保存下来
# 使用filecookiejar实现


from urllib import request, parse
from http import cookiejar

# 创建filecookiejar的实例
filename = '43_15_cookie.txt'
cookie = cookiejar.MozillaCookieJar(filename)
# 生成cookie的管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handler = request.HTTPHandler()
# 生成https管理器
https_handler = request.HTTPSHandler()
# 创建请求管理器
opener = request.build_opener(http_handler, https_handler, cookie_handler)

# 初次登录,验证后给我们cookie
def login():
'''
负责初次登录
需输入用户名和密码,用来获取cookie凭证
'''
# 登录用户地址,进入人人网登录首页,查看网页源码
# 网页源码中打开查找,查找“下次自动登录”
# 然后向上找form,里面就有login-form
url = 'http://www.renren.com/PLogin.do'

# 此键值需要从登录form的对应两个input中提取name属性
data = {
'email': '[email protected]',
'password': 'zfb123456'
}

# 把数据进行编码
data = parse.urlencode(data)

# 创建一个请求对象
req = request.Request(url, data=data.encode())

# 使用opener发起请求,会自动提取我的cookie
rsp = opener.open(req)

# 保存cookie到文件
# ignore_discard表示即使cookie没什么用了也会保存下来
# ignore_expires表示该文件中的cookie即使已经过期也保存下来
cookie.save(ignore_discard=True, ignore_expires=True)


if __name__ == '__main__':
login()

下接:
Python3网络爬虫教程7——SSL数字证书


标签:__,http,handler,request,session,cookie,浏览器,Python3
From: https://blog.51cto.com/u_14990501/6028990

相关文章

  • Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)
    Python全栈工程师核心面试300问深入解析(2020版)----全文预览Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅今天尝试了一个Python3的爬虫项目:Pytho......
  • Python3网络爬虫教程5——ProxyHandler处理(代理服务器和代理IP)
    上接:Python3网络爬虫教程4——UserAgent的使用(用户伪装)(附常用的UserAgent值清单[3.ProxyHandler处理(代理服务器)使用代理IP,是爬虫的常用手段服务器有反爬虫手段,使用代......
  • Python3.7采用CMD自动安装Pygame1.9.4
    ​​Python全栈工程师核心面试300问深入解析(2020版)----全文预览​​​​​​Python3.7采用CMD自动安装Pygame1.9.4,一步即可最近正在学习python开发游戏,需要安装Pygam......
  • python3 获取国内上一个交易日 依赖chinese_calendar
    #获取国内上一个交易日defgetLastTradingday():#依赖库chinese_calendar,datetimedayStep=1lastTradingday=datetime.datetime.now()-datetime.......
  • 闲聊flask web编程中的cookie
    在web编程中,cookie和session的区别于联系并不是一个很容易搞清楚的事情。在我从事后端工作的很长时间里,对于他们的应用也并不多,因为大多数时间都是在编写API接口供其他系统......
  • 会话技术Session快速入门与Session原理分析
    ##Session:1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession2.快速入门:1.获取HttpSession对象:......
  • JSP案列_改造Cookie案例
    <%@pageimport="java.net.URLDecoder"%><%@pageimport="java.util.Date"%><%@pageimport="java.text.SimpleDateFormat"%><%@pageimport="java.net.URLEnco......
  • 【7】Python3函数
    Python函数函数是一个被命名的、独立的、完成特定功能的可重复使用的代码段,其可能给调用它的程序一个返回值。 被命名的:在Python中,大部分函数都是有名函数完成特定功......
  • 【6】Python3循环语句之while,for循环
    1.循环:有条件地重复地做一件事,每一次做的事情不同但类似在Python中,循环结构分为while和for两种。while判断条件:执行语句……执行语句可以是单个语句或语句块。判断......
  • 【5】Python3基础之运算符,条件控制if
    1、运算符分类算术运算符,赋值运算符,复合赋值运算符,比较运算符,逻辑运算符混合运算优先级顺序:()高于**高于* / // % 高于+ -     python条......