验证码识别学习笔记(玩转python网络爬虫)

网站中加入验证码的目的是加强用户的安全性和提高反爬虫机制,有效防止对某一特定用户用特定程序暴力破解的方式不断进行登录尝试。

一、验证码类型

  • 字符验证码:在图片上随机产生数字、英文字符或汉字,一般由4位或5位组成验证码组成,通过添加干扰线、添加噪点、添加字符的粘连程度和旋转角度来增加机器识别的难度,运用OCR技术能够破解。
  • 图片验证码:应用了字符验证码的技术,不再是随机的字符,而是让人识别图片或将广告嵌入图片上面的验证码。
  • GIF动画验证码:GIF动态的验证码图片,不容易辨识哪一个图层是真正的验证码,在提供清晰图片的同时,可以有效地防止识别器识别,还能增加网站页面的美观效果。
  • 极验验证码:基于行为式验证技术,通过拖动滑块完成拼图的形式实现验证。
  • 手机验证码:通过短信的形式发送到用户手机上面的验证码,一般为6位验证码。
  • 语音验证码:属于手机验证码的一种方式。
  • 视频验证码:将随机数字、字母和中文组合而成的验证码动态嵌入MP4、FLV等格式的视频中,增大破解的难度,因为动态变化、随机响应,可以有效防范字典攻击、穷举攻击等攻击行为,因为验证码字母、数字组合,字体的形状、大小,速度的快慢,显示效果和轨迹的动态变化,增加了恶意截屏破解的难度。

验证码识别的三种解决方案:

(1)人工识别验证码:将验证码图片下载到本地,然后靠使用者自行识别并将识别内容输入,程序获取输入内容,完成验证码的识别。特点:开发简单,适合初学者,但过分依赖人为控制,难以实现批量爬取。

(2)通过python调用OCR引擎识别验证码。特点:OCR准确率低,需要机器学习不断提高OCR的准确率,开发成本高。

(3)调用API使用第三方平台识别验证码。特点:开发成本低,有完善的API接口直接调用即可,识别准确率高,但每次识别需收取小额费用。

二、OCR技术

OCR光学字符识别,指的是电子设备检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程,即针对印刷体字符,采用光学的方法将纸质文档转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。

支持OCR的模块有pytesser3和pyocr,通过模块功能调用OCR引擎识别图片,OCR引擎再将识别的结果返回到程序中。

(1)安装OCR模块

1、pyocr模块安装

CMD模式下:pip install pyocr

2、PIL模块安装

CMD模式下:pip install Pillow

3、OCR引擎安装

  • 安装包下载:在GitHub开源库下载,地址:https://github.com/UB-Mannheim/tesseract/wiki
  • 安装:将下载的exe安装,注意:Additional language data (download)是识别文字选项,默认不勾选是英文,勾选之后会访问谷歌进行下载安装其他语言。
  • 配置环境变量:需要配置环境变量才能使用Tesseract-OCR引擎。

(2)使用OCR模块进行识别图片

# 导入库函数
from PIL import Image
from pyocr import tesseract
# 使用PIL打开图片
img = Image.open('Englist.png')
# 转换成灰度图片
img = img.convert('L')
# 将灰度图片保存在temp.png中
img.save('temp.png')
# OCR识别
code = tesseract.image_to_string(img)
print(code)

说明:颜色模式convert()方法参数可以有多种选择,分别为RGB模式、CMYK模式、HSB模式、Lab颜色模式、位图模式、灰度模式、索引颜色模式、双色调模式和多通道模式。

三、第三方平台

验证码识别主要平台:

打码平台:主要由在线人员识别验证码,开发者只需调用平台API接口。

AI开发者平台:主要由人工智能系统识别,准确率取决于系统的智能程度,调用API接口每天有免费次数,也可以付费使用。主流平台有:百度AI和腾讯AI。

使用方法:只需在爬虫代码中引用API文档,然后调用主方法函数,传入已注册的用户信息和需要识别的图片即可。

你可能感兴趣的:(笔记)