Python爬虫实现Cookie模拟登录

 更新时间:2024年04月10日 16:16:40   作者:万里顾—程  
这篇文章主要介绍了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爬虫模拟登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python遍历文件夹的各种方法大全

    python遍历文件夹的各种方法大全

    在Python中,可以使用多种方法来多次遍历文件,下面这篇文章主要给大家介绍了关于python遍历文件夹的各种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Python statistics模块示例详解

    Python statistics模块示例详解

    这篇文章主要介绍了Python statistics模块示例详解,本文总结了 statistics 模块的常规操作,对于数据分析还是非常有益处的,需要的朋友可以参考下
    2023-05-05
  • python线程定时器Timer实现原理解析

    python线程定时器Timer实现原理解析

    这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python创建xml的方法

    Python创建xml的方法

    这篇文章主要介绍了Python创建xml的方法,实例分析了Python操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python实现捕获异常发生的文件和具体行数

    Python实现捕获异常发生的文件和具体行数

    这篇文章主要介绍了Python实现捕获异常发生的文件和具体行数。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python3连接kafka模块pykafka生产者简单封装代码

    python3连接kafka模块pykafka生产者简单封装代码

    今天小编就为大家分享一篇python3连接kafka模块pykafka生产者简单封装代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python对输出的奇数偶数排序实例代码

    python对输出的奇数偶数排序实例代码

    在本篇内容里小编给大家整理的是一篇关于python对输出的奇数偶数排序实例代码内容,有兴趣的朋友们可以参考下。
    2020-12-12
  • Jupyter Notebook输出矢量图实例

    Jupyter Notebook输出矢量图实例

    这篇文章主要介绍了Jupyter Notebook输出矢量图实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python dataframe astype 字段类型转换方法

    python dataframe astype 字段类型转换方法

    下面小编就为大家分享一篇python dataframe astype 字段类型转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • django将图片保存到mysql数据库并展示在前端页面的实现

    django将图片保存到mysql数据库并展示在前端页面的实现

    这篇文章主要介绍了django将图片保存到mysql数据库并展示在前端页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05

最新评论