爬虫reqeuests库-6-使用requests模拟登陆的三种方式-字典推倒式

cookie和session的区别

  • cookie数据存放在客户浏览器上,session放在服务器上
  • cookie不安全
  • session访问增多时会占用服务器性能
  • cookie保存的数据不能超过4K,很多浏览器都设置一个站点最多保存20个cookie

爬虫处理cookie和session

  • 携带一堆cookie组成cookie池
  • 能不使用cookie时尽量不用,速度快,但是如果要获取登录后的页面,必须带cookie

requests处理session请求

  • requests提供了一个session类,用来实现客户端和服务端的会话保持
  • 使用方法
    • 实例化一个session对象
    • 让session发送get或者post请求
      session发送过一次请求后,后面再请求就可以带上之前的cookie了

session = requests.session()
response = session.get(url,headers)

  • 使用requests模块提供的session类来请求登录之后的网站的思路

想象一下浏览器请求数据的思路:先登录,再退出再登录进去的时候是已经登录好的页面。因为之前登录成功的cookie已经带上了,这就是session的工作,那么代码中就要实例化一个session。具体步骤如下:

  • 实例化session

  • 先使用session发送请求登录网站,把cookie保存在session中

  • 再使用session请求登录之后才能访问的网站,session能够自动携带之前登录成功时已经保存好的cookie,这样就是带着cookie进行请求,所以能直接进入登录后的页面,而不是需要登录的页面。

  • 以登录人人网为例使用requests模块提供的session类来请求登录之后的页面

  • 不发送post请求,使用cookie、get获取登录后页面的情况
  • cookie过期时间很长的网站,在cookie过期之前拿到所有数据,比较麻烦。
    政府的一些网站,维护不好的小网站。不用先发送post请求,直接复制一段cookie就能用

  • 配合其他程序使用,其他程序专门获取cookie,当前程序专门获取页面。’

将cookie字符串转换成字典:字典推倒式
.
In [1]: {i:i+10 for i in range(10)}
Out[1]: {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}
.
In [2]: {i:“b” for i in range(10)}
Out[2]:
{0: ‘b’,
1: ‘b’,
2: ‘b’,
3: ‘b’,
4: ‘b’,
5: ‘b’,
6: ‘b’,
7: ‘b’,
8: ‘b’,
9: ‘b’}
同样,将cookie转换成字典,用split按分号和空格进行切割
Cookie: anonymid=jz7qmfmcto8wwo; depovince=GW; r01=1; JSESSIONID=abcCK1kawMcd3ah1RGdYw; ick_login=da5f2b8c-652f-4858-9bac-234416c4065d; t=bd6af47190e48bf012f3ebac11062df73; societyguester=bd6af47190e48bf012f3ebac11062df73; id=971883413; xnsid=7c7d1fb8; jebecookies=18e4275a-0156-4887-bc7e-ff96090ac620|||||; ver=7.0; loginfrom=null; jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491238; jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491240; wp_fold=0

cookies.split按照分号和空格切割后得到的结果是一个列表

In [5]: cookies = “anonymid=jz7qmfmcto8wwo; depovince=GW; r01=1;
JSESSIONID=abcCK1kawMcd3ah1RGdYw;
ick_login=da5f2b8c-652f-4858-9bac-234416c4065d;
t=bd6af47190e48bf012f3ebac11062df73;
societyguester=bd6af47190e48bf012f3ebac11062df73; id=971883413;
xnsid=7c7d1fb8; jebecookies=18e4275a-0156-4887-bc7e-ff96090ac620|||||;
ver=7.0; loginfrom=null;
jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491238;
jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491240;
wp_fold=0”

In [6]: cookies.split("; ")
Out[6]: [‘anonymid=jz7qmfmcto8wwo’,
‘depovince=GW’, ‘r01=1’, ‘JSESSIONID=abcCK1kawMcd3ah1RGdYw’,
‘ick_login=da5f2b8c-652f-4858-9bac-234416c4065d’,
‘t=bd6af47190e48bf012f3ebac11062df73’,
‘societyguester=bd6af47190e48bf012f3ebac11062df73’, ‘id=971883413’,
‘xnsid=7c7d1fb8’,
‘jebecookies=18e4275a-0156-4887-bc7e-ff96090ac620|||||’, ‘ver=7.0’,
‘loginfrom=null’,
‘jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491238’,
‘jebe_key=3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491240’,
‘wp_fold=0’]

利用字典推倒式遍历这些列表,字典的键是列表中第i个元素等号左边的内容,值是等号右边的内容。再次利用split按等号进行切割,键取第0个,值取第一个。
利用 {i:i+10 for i in range(10)}公式将切割后的列表转换成字典。

In [7]: {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}
Out[7]:
{‘jebecookies’: ‘18e4275a-0156-4887-bc7e-ff96090ac620|||||’,
‘societyguester’: ‘bd6af47190e48bf012f3ebac11062df73’,
r01’: ‘1’,
‘jebe_key’: ‘3d4c9a96-95cd-4ac7-ab28-f0e31a95b956%7C2207a2a4e8711f1ca89c7158cb284901%7C1565574491442%7C1%7C1565574491240’,
‘depovince’: ‘GW’,
‘ick_login’: ‘da5f2b8c-652f-4858-9bac-234416c4065d’,
‘anonymid’: ‘jz7qmfmcto8wwo’,
‘JSESSIONID’: ‘abcCK1kawMcd3ah1RGdYw’,
‘loginfrom’: ‘null’,
‘wp_fold’: ‘0’,
‘xnsid’: ‘7c7d1fb8’,
‘t’: ‘bd6af47190e48bf012f3ebac11062df73’,
‘id’: ‘971883413’,
‘ver’: ‘7.0’}

因为字典是无序的,所以字典的顺序与列表顺序不一致。
这种将cookie单独拿出来做参数的结果等同于将cookie合并到headers变量。

获取登录后页面的三种方式

  • 实例化session,再用session发送post请求,获取登录后的页面
  • headers中添加cookie键,值是cookie字符串
  • 在请求方法中添加cookies参数,接收字典形式的cookie,字典的键是cookie的name,值是cookie的value,name和value在浏览器检查Network-Name-Cookies中查看。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值