[爬虫]验证码识别(4.1)

Posted 兴华python笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[爬虫]验证码识别(4.1)相关的知识,希望对你有一定的参考价值。

    验证码识别成为了对抗反爬虫的必修课之一,本专题将着重学习记录不同的验证码识别方式:图像验证码、极验滑动验证码、点触验证码、宫格验证码。


  • 点触验证码识别

识别效果如下:




识别难点:

    如下图所示,该图为12306的点触验证码,识别难点有两个:

1、文字识别,即首先要识别出“盘子”二字,但往往该文字经过了一系列的变换,如果借助第一节提到的OCR技术,基本上无法识别。

2、将图片转化为相应的文字,难度可想而知。



另一种验证码如下:


[爬虫]验证码识别(4.1)


( 和上述验证码相比较而言,会简单一些,但是识别思路相同,我就着重记录一下第一种验证码的识别过程。)


识别思路:

    点触验证码难度较大,我们可以接触互联网上一些验证码服务平台,他们提供7×24小时的服务,并且识别准确率在90%以上。

    大致流程是将验证码图片按照字节流的形式传递给服务平台,平台几秒钟后将会返回一个带有坐标信息的字段,该坐标信息就是我们需要点击的位置。按照得到的坐标信息进行点击,便可以完成识别。

    验证码服务平台往往提供了多种类型的验证码识别,例如“超级鹰”网址:https://www.chaojiying.com/,其提供了数字、中英文、特殊字符、数学计算和坐标选择识别等多种验证码类型的识别。点触验证码识别就是坐标选择识别的一种。下面将利用该平台进行识别。




  • 获取超级鹰python API

[爬虫]验证码识别(4.1)

[爬虫]验证码识别(4.1)

    代码如图,其定义了一个Chaojiying_Client的类,内有三个参数,分别是超级鹰的用户名、密码、软件ID。内含两个函数 PostPic()、ReportError()。

    ※ PostPic()需要传入图片对象和验证码的代号(验证码类型)。该方法会将图片对象发送给给超级鹰的后台进行识别,然后返回一个JSON。

    ※ ReportError()发生错误时的回调。


验证过程如下:

  • 导入所需要的包、设置12306和超级鹰的账号密码

[爬虫]验证码识别(4.1)


  • 初始化一些参数、进入12306的网站并输入账号密码登录

[爬虫]验证码识别(4.1)


  • 获取验证码图片

该操作在按照所需大小截取图片是经常用到

[爬虫]验证码识别(4.1)


  • 解析识别结果

[爬虫]验证码识别(4.1)

平台返回的JSON信息格式如下:

{

'err_no': 0, 

'err_str': 'OK', 

'pic_id': '8056217061965800013', 

'pic_str': '29,72|257,71',

'md5': '8de76ac4036ebab2b1e05375c1bf84b8'

}

该方法即是将'pic_str'中的坐标信息格式化:

[29, 72]

[257, 71]


  • 点击验证图片

[爬虫]验证码识别(4.1)


其中move_to_element_with_offset操作的参数及解释:

[爬虫]验证码识别(4.1)


  • 点击登录

[爬虫]验证码识别(4.1)


  • 操作流程

[爬虫]验证码识别(4.1)

    首先打开12306网站,并刷新验证码(button),然后将验证码图片对象按照字节流的格式传递给超级鹰平台,并将返回的locations信息传递给touch_click_words()函数,最后完成验证码识别。


  • 执行



  • 最终效果


  • 关键字总结

    • 获取图片位置、截取图片

    • 调用超级鹰API

    • ActionChains

    • 字节流处理


以上是关于[爬虫]验证码识别(4.1)的主要内容,如果未能解决你的问题,请参考以下文章

中文项目:快速识别验证码,CNN也能为爬虫保驾护航

[爬虫]微博宫格验证码识别(3.1)

爬虫验证码识别方法

Python3网络爬虫实战-43极验滑动验证码的识别

如何python爬虫识别验证码

鲸数云爬虫门槛之验证码识别