cookie与session

目录

  • cookie与session
  • 代码模拟用户登录
  • json格式数据
  • ip代理池
  • cookie代理池

cookie与session

由来

# cookie与session的发明是专门用来解决HTTP协议无状态的特点
    
早期的网址不需要保存用户状态,所有人来访问都是相同的数据
随着时代的发展越来越多的网址需要保存用户状态

cookie

cookie:保存在客户端浏览器上面的键值对数据

用户第一次登录成功之后,浏览器会保存用户名和密码
之后访问网站都会自动带着该用户名和密码

 session

session:保存在服务端上面的用户相关的数据

用户第一次登录成功之后,服务端会返回给客户端一个随机字符串
客户端浏览器保存该随机字符串之后访问网站都带着该随机字符串

 

 两者关系

session需要依赖cookie
只要是涉及到用户登录都需要使用到cookie

 PS:浏览器也可以拒绝保存数据

 

 

代码模拟用户登录

 步骤一

研究登录数据提交给后端的url地址

# 登录地址:http://www.aa7a.cn/user.php

步骤二

研究登录post请求携带的请求体数据格式
浏览器network选项中,请求体对应的关键字是Form Data

 步骤三

模拟发送post请求

代码演示

import requests

post = {
    "username": "111111111@qq.com",
    "password": "22222",
    "captcha": "bsfy",
    "remember": 1,
    "ref": "http://www.aa7a.cn/",
    "act": "act_login"
}

res = requests.post('http://www.aa7a.cn/user.php',
                    data = post
                    )

print(res.cookies.get_dict())
View Code

获取cookie数据

# print(res.cookies.get_dict())
user_cookie = res.cookies.get_dict()

# 1.用户名或密码错误的情况下返回的cookie数据
    {'ECS[visit_times]': '1', 'ECS_ID': '69763617dc5ff442c6ab713eb37a470886669dc2'}


# 2.用户名和密码都正确的情况下返回的cookie数据
    {
    'ECS[password]': '4a5e6ce9d1aba9de9b31abdf303bbdc2', 
    'ECS[user_id]': '61399', 
    'ECS[username]': '616564099%40qq.com', 
    'ECS[visit_times]': '1', 
    'ECS_ID': 'e18e2394d710197019304ce69b184d8969be0fbd'
    }
View Code

 使用cookie访问网站

res1 = requests.get('http://www.aa7a.cn/',
                    cookies=user_cookie
                    )
if 'xxxxxxxxx@qq.com' in res1.text:
    print('登录身份访问')
else:
    print('cookie存在错误')
View Code

 

 获取大数据

# stream参数
比如下载视频时,如果视频有100G
用response.content然后一下子写到文件中是不合理的
所以一点I一点取

代码演示

import requests
response=requests.get('https://www.shiping.com/xxx.mp4',
                      stream=True)
with open('b.mp4','wb') as f:
    for line in response.iter_content():  # 一行一行读取内容
        f.write(line)
View Code

 

json格式

在网络爬虫领域,其实内部有很多数据都是采用的json格式
# 前后端数据交互一般使用的都是json格式

 代码演示

import requests
res = requests.get('https://api.bilibili.com/x/player/pagelist?bvid=BV1QE41147hU&jsonp=jsonp')
print(res.json())  # 可以直接将json格式字符串转换成python对应的数据类型
View Code

 

SSL相关报错

苹果电脑常见


# 相关解决网站: https://jingyan.baidu.com/article/ea24bc39b147c7da62b33138.html

 

IP代理池

# 代理设置:先发送请求给代理,然后由代理帮忙发送

对于封IP的网站,需要很多的代理IP,而每个卖代理IP的网站也提供了免费IP,IP代理池由此而来

代码演示

import requests
proxies={
    'http':'免费IP地址',
    'http':'免费IP地址',
    'http':'免费IP地址',
}
respone=requests.get('要爬取的网站',
                     proxies=proxies)

 

Cookie代理池

有很多网站针对客户端的cookie也存在防爬措施
    eg:比如一分钟之内同一个cookie访问该网站的次数不能超过30次超过了就封禁该cookie


如何解决?
# cookie代理池
里面有很多cookie每次访问从中随机挑选一个
            

代码演示

respone=requests.get('要爬取的网站',
                     cookies={})

 

posted @ 2021-09-16 15:56  陌若安然  阅读(55)  评论(0)    收藏  举报