验证码概述

什么是图片验证码?

验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers andHumans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

验证码的作用

防止恶意破解密码、刷票、论坛灌水、刷页。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。

图片验证码使用场景

  • 注册
  • 登录
  • 频繁发送请求时,服务器弹出验证码进行验证

图片验证码的处理方案

  • 手动输入(input)这种方法仅限于登录一次就可持续使用的情况
  • 图像识别引擎解析使用光学识别引擎处理图片中的数据,目前常用于图片数据提取,较少用于验证码处理
  • 打码平台爬虫常用的验证码解决方案

对于验证码的处理,我们今天主要学习通过打码平台去处理验证码

图片在网页页面中的形式

图片在网页页面中的形式一般就两种:一种是以一个连接形式存在html中,另外一种是以字符串的形式存在于html中。

以链接形式存在于html中的图片,意味着每次浏览器执行渲染的时候会发送图片链接地址请求,请求到了之后再渲染到页面。目前大部分网站都是以这种形式去加载图片的。之前我们也学习过通过获取图片的链接地址就可以请求图片数据。

Python爬虫基础讲解(二十一):验证码概述_数据分析

这样的形式存在于页面当中的图片,如果一旦页面图片很多的话,就意味着需要发送很多次网络请求,去请求图片数据。

以字符串形式存在于html中的图片,和上述形式有明显的区别。这样形式的图片在html页面中是以字符串的形式去展示图片,而不是一个链接。


Python爬虫基础讲解(二十一):验证码概述_Python_02

 

 

这样的好处是加载页面的时候,不用发送网络请求去请求图片数据。因为我们在请求html页面的时候就已经拿到图片的字符串数据,浏览器只需要转换图片为二进制形式展示就可以了。

有利也有弊,这样做虽然网络请求的次数少了,但是我们需要把图片转换成字符串形式才可以放到标签里面。如果图片数据过大,那么转换之后的字符长度就会很长。所以一般网页中字符串形式的图片都是数据量比较小的图片,比如验证码。

如何进行图片形式的转化

前面我们讲了图片有两种形式,链接形式的图片我们通过requests发送请求就可以拿到图片的二进制数据,保存下来就可以用看图软件查看。这种形式的图片处理就不做赘述了。

那么字符串的形式的图片我们应该如何处理呢?

字符串形式的图片我们可以借助base64模块进行处理。

  • base64.b64decode()
    把字符串形式的图片转化为二进制的数据,传入图片的字符串数据

  • base64.b64encode()
    把二进制形式的图片转化为字符串数据,传入图片的二进制数据