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())
获取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' }

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

获取大数据
# 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)
json格式
在网络爬虫领域,其实内部有很多数据都是采用的json格式 # 前后端数据交互一般使用的都是json格式

代码演示
import requests res = requests.get('https://api.bilibili.com/x/player/pagelist?bvid=BV1QE41147hU&jsonp=jsonp') print(res.json()) # 可以直接将json格式字符串转换成python对应的数据类型
苹果电脑常见
# 相关解决网站: 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也存在防爬措施 eg:比如一分钟之内同一个cookie访问该网站的次数不能超过30次超过了就封禁该cookie 如何解决? # cookie代理池 里面有很多cookie每次访问从中随机挑选一个
代码演示
respone=requests.get('要爬取的网站',
cookies={})

浙公网安备 33010602011771号