Python爬虫实现Cookie模拟登录
0.模拟登录原理
模拟登录,一般是网站在浏览器中使用POST请求向后端发送数据请求的过程,响应后的数据一般会设置相关的Session与Cookie标识用户的登录标识。对于前后端分离的项目中,也有可能是加密密钥的token,例如 ,jwt 登录的方式的 token 一般包含时效性,当然cookie 也具备时效性。但是在登录请求的请求头并不用包含,因为这些都是登录后的返回结果的信息,务必注意区分。
1、Cookie模拟登录
现在很多网站需要用户成功登录后才可以查看相关内容。使用Cookie 模拟登录可以很好地解决这种问题。
Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie是一个记录了用户登录状态以及用户属性的加密字符串,Cookie可以保持登录信息到用户下次与服务器的会话。Cookie 以键 / 值对形式存储。
Cookie 验证流程:当用户第一次登陆网站时,服务端会在返回的响应头 Response Headers 中添加 Cookie数据, 浏览器接收到响应头的信息后,会将 Cookie 保存至浏览器本地存储中,当用户再次向该网站发送请求时,请求头中就会携带 Cookie,这样服务器通过读取 Cookie 就能识别登陆用户了。
Cookie在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户在请求参数中传入Cookie,在发送请求访问url时,会跳过登录界面,跳过登录验证流程,从而直接访问到想要的网站数据。
Cookie 模拟登录使用实例:
注册一个微博账号,登录微博并进入个人主页,使用F12打开浏览器的调试工具,在 Headers 选项中找到请求头Request Headers 中的 Cookie 信息,复制保存。
import urllib.request import urllib.parse url = 'https://weibo.com/u/6768120693/home' #请求头参数 headers = { 'cookie': 'UPSTREAM-V-WEIBO-COM=35846f552801987f8c1e8f7cec0e2230; _s_tentry=passport.weibo.com; Apache=3550042880907.0825.1657677410065; SINAGLOBAL=3550042880907.0825.1657677410065; ULV=1657677410241:1:1:1:3550042880907.0825.1657677410065:; XSRF-TOKEN=wpUjXoB3U_T8KzDcYBGeQmeg; WBPSESS=dg5zs_KFY81p0FnDKmb34Ti2iJGu9QxJdhMzG8ikVBN-CyoFvr-FTOapET7oPxP0FTRcDR-4ospowpRpkqiE8Gga-FNf9Bekers3TFYG5vxMEBfXahOBmCiJK7XwTPB_GaeInt3uz0W9CfgA545n9SWoyDpY910MV0NogSygO48=; PC_TOKEN=fd99713024; login_sid_t=6d987092eac2182f810741424691738b; cross_origin_proto=SSL; WBStorage=4d96c54e|undefined; wb_view_log=1920*10801; SUB=_2A25Py7HwDeRhGeBJ7VoQ8i7Kwj-IHXVsoKQ4rDV8PUNbmtAKLVPNkW9NRi9nZzdxPj2ym6xf8i-dSCWgSnyp4GVC; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5e8Y.xknmxKI8AQq4L07-c5JpX5KzhUgL.FoqNSonpeo5c1Ke2dJLoI0.LxKqL1h5L1KzLxKqL1KqLBK-LxKqL1hnL1K2LxKML1-2L1hBLxK-L1K5L12BLxK-LB-BL1KUT-27t; ALF=1689318688; SSOLoginState=1657782688; wvr=6; wb_view_log_6768120693=1920*10801; webim_unReadCount=%7B%22time%22%3A1657782816028%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A40%2C%22msgbox%22%3A0%7D', 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10' } request = urllib.request.Request(url=url,headers=headers) response = urllib.request.urlopen(request) content = response.read().decode('utf-8') with open('weibo.html','w',encoding='utf-8') as file: file.write(content)
2、Handler处理器
Handler处理器可以定制更高级的请求头,基本的urlopen()方法不支持代理、动态cookie等其他的HTTP/HTTPS高级功能。
Handler处理器使用步骤:
- 使用Handler处理器(如HTTPHandler或HTTPSHandler)来创建特定功能的处理器对象;
- 然后通过urllib.request.build_opener()方法使用处理器,构建opener对象;
- 使用构建的opener对象,调用open()方法发送请求。
使用实例:
import urllib.request url = 'http://www.baidu.com' headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10' } #1、获取HTTPHandler处理器对象 http_handler = urllib.request.HTTPHandler() #获取HTTPSHandler处理器对象 https_handler = urllib.request.HTTPSHandler() #2、构建opener对象 http_opener = urllib.request.build_opener(http_handler) https_opener = urllib.request.build_opener(https_handler) #定制请求 request = urllib.request.Request(url=url,headers=headers) #3、调用open方法发送请求 http_response = http_opener.open(request) https_response = https_opener.open(request) print(http_response) print(https_response)
执行结果:
<http.client.HTTPResponse object at 0x000002220510A470>
<http.client.HTTPResponse object at 0x0000022205116CC0>
到此这篇关于Python爬虫实现Cookie模拟登录的文章就介绍到这了,更多相关Python爬虫模拟登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python3连接kafka模块pykafka生产者简单封装代码
今天小编就为大家分享一篇python3连接kafka模块pykafka生产者简单封装代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-12-12python dataframe astype 字段类型转换方法
下面小编就为大家分享一篇python dataframe astype 字段类型转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-04-04django将图片保存到mysql数据库并展示在前端页面的实现
这篇文章主要介绍了django将图片保存到mysql数据库并展示在前端页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-05-05
最新评论