使用session解决动态刷新的图片验证码

本文介绍了在Python爬虫中如何处理动态验证码,通过使用session和cookie来模拟登录。首先解释了session和cookie的基本概念,然后阐述了它们在登录过程中的作用。在登录时,先获取验证码图片并保存,识别后提交包含学号、密码和验证码的post请求,同时携带之前获取的cookie,从而实现模拟登录。代码示例中使用requests库的session方法完成这一过程。
摘要由CSDN通过智能技术生成

注意:阅读本文之前需要有一定的爬虫基础

前言

我们在爬网站的时候经常会遇到输入图片验证码的情况(img-h13uVzw5-1664442863338)(C:/Users/24443/AppData/Roaming/Typora/typora-user-images/image-20220929160009974.png)],解决这种验证码的方法也有很多,比如:

  • 使用selenium访问网页并截图进行识别
  • 找到验证码图片的地址进行访问并保存进行识别

第一种方法所见即所得,模仿正常人浏览网页输入验证码的方式,但是有个缺点,使用selenium需要图形化界面,降低了访问效率。

第二种方法访问效率高但是也有个致命的缺点,就是验证码是动态刷新的,每次访问验证码的url时验证码都会变化,那么我们该怎么解决呢?

这里需要使用session和cookie来处理

session和cookie是什么?

Cookie和Session的区别(面试必备)_秋风不识路的博客-CSDN博客_cookie与session区别

这篇文章介绍的很详细了,这里我再简单解释一下:比如我们在访问CSDN的时候,如果已经登陆了,下次再打开CSDN时不需要登陆。这就是session和cookie的作用,session存储在网站的服务器端,cookie存储在我们电脑的浏览器中,当我们首次访问一个网站的时候,首先服务器中会产生一个session并向浏览器端发送一个set-cookie,我们的浏览器会生成一个cookies,在下次访问该网站的时候浏览器发送cookie到服务器,服务器便知道我们的身份了。解释的不是很严谨,但意思一致。

原理

当我们正常登录一个网站的时候,我们首先要做的是进入下面这样的登录界面

现在将其看做主界面部分和验证码部分,在打开这个界面的一瞬间这两部分是同时加载的,但是这个界面下我们是无法获取界面中的这个验证码的,只能通过解析源代码获取验证码的访问链接,当我们访问该验证码链接时,验证码又刷新了,所以这个方法行不通。

其实这个主界面对爬虫程序而言是没有用的,模拟登陆(相当于点击登陆按钮)只需要往post请求中添加学号密码验证码这些参数即可。

现在思路是不是清晰了许多?我们只需要访问验证码的链接(相当于访问了登录界面)并且保存下验证码,并且保存该次访问的cookie信息,在提交登陆的post请求时只需要带上这个cookie(让服务器知道我们之前访问的验证码是这个)和需要的学号密码以及验证码即可模拟登陆成功。

代码实现:

实现该功能我们可以使用requests库中的session方法

session = requests.session()# 创建session对象
resposne = session.get('验证码链接')# 访问验证码的链接并保存结果
with open('code.png','wb') as fp:
	fp.write(response.content)# 保存验证码

# 这里需要进行验证码的识别
# code = xxx.xxx
data = {
	'学号':'xxx',
	'密码':'xxx',
	'验证码':code
}# 保存登陆需要的数据
response = session.post(url=url,data=data)# 模拟登陆
with open('main_page.html', 'w', encoding='utf-8') as fp:# 保存登陆的界面
	fp.write(response.text)

验证码的识别部分可以参考这里python验证码识别库ddddorc_八天一吨水的博客-CSDN博客_验证码本地识别库

最后我们打开保存的登录界面,如果与正常登陆的界面类似说明大功告成。

本文仅供学习使用,请勿用于其他用途

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指针到处飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值