cookie与session用法
概要
-
cookie与session
-
代码模拟用户登录
-
json格式数据
-
ip代理池
-
cookie代理池

详情
-
cookie与session
早期的网站并不需要保存用户的状态,所有人都能访问相同的数据。然而随着网站越来越复杂,用户的信息就需要被保存。而HTTP协议是无状态的
# cookie和seesion的出现能够解决HTTP协议的无状态特性 定义: (1)cookie:保存在客户端的键值对数据 原理:用户首次登录网站成功,浏览器会保存使用的用户名和密码等数据,之后再次访问的请求携带用户名和密码 (2)session:保存在服务端的用户相关数据 原理:用户首次登录网站成功,服务端会返回给客户端一个或多个随机字符串,客户端保存该字符串,之后再次访问的请求只需携带该随机字符串即可 """session基于cookie使用"""


# cookie实践 在浏览器->检查->network中可以看到,请求体的关键字是Form Data eg: 网址:http://www.aa7a.cn/user.php # 校验用户名和密码的接口 请求体格式: username: xxxxxx password: xxxxxx captcha: jv3d remember: 1 ref: http://www.aa7a.cn/user.php?act=logout act: act_login """研究爬虫的流程!!!""" 1.找到登录时提交数据的目标url地址 2.了解登录post请求携带的请求体数据格式 3.模拟发送post请求

-
代码模拟用户登录
弄明白向服务端发送的请求,就为实现利用代码模拟用户登录提供了可能。
import requests testUrl = 'http://www.aa7a.cn/user.php' # 登录时发送的post请求的请求体 postR = { "username": "423168031@qq.com", "password": "123123", "captcha": "z2ft", "remember": 1, "ref": "http://www.aa7a.cn/?act=logout", "act": "act_login" } # 发送post请求,data参数是请求体数据 res = requests.post(testUrl, data=postR) #获取登录成功后浏览器收到的cookie数据 print(res.cookies.get_dict()) """用户名和密码均正确""" # 返回的cookie数据 cookieDict = { 'ECS[password]': '4297f44b13955235245b2497399d7a93', 'ECS[user_id]': '67327', 'ECS[username]': '423168031%40qq.com', 'ECS[visit_times]': '1', 'ECS_ID': 'e5cf79f8784ecd0bcfce57d6944719249757e7da' } # 使用上述正确的cookie登录网站 resG = requests.get(testUrl,cookies=cookieDict) if "423168031@qq.com" in resG.text: print('登陆成功') else: print('cookie有问题')


-
json格式数据
response.content一下子获取较大数据过于消耗内存 解决方案:设置stream参数 # 比如读取一个200G的视频 response=requests.get(url,stream=True) with open('b.mp4','wb') as f: for line in response.iter_content(): # 逐行读取内容 f.write(line) # 网络上包括爬虫相关,很多数据交互均采用json格式 json特点:数据由双引号标识 json()方法:将json格式数据反序列化转换成Python中对应的其他数据类型 eg: res = requests.get(url) res.json()
-
ip代理池
有些网站会使用对客户端ip地址进行校验的防爬措施 eg: 1min之内同一个ip地址的访问次数不能超过30次,否则禁止该ip访问 解决方案: 使用IP代理池(由另外的ip地址代替该ip发送请求) 格式: # 每个ip均限制特定的端口 proxies={ 'http':'114.99.223.131:8888', 'http':'119.7.145.201:8080', 'http':'175.155.142.28:8080' } response=requests.get(url,proxies=proxies)

-
cookie代理池
有些网站会使用对客户端cookie数据(即登录的账户)进行校验的防爬措施 eg: 1min之内同一个cookie的登录次数不能超过30次,否则禁止该cookie访问 格式: resposne=requests.get(url,cookies={}) # 备用的cookie需要自行模拟

浙公网安备 33010602011771号