两种方式识别“传统”图片验证码
目前,很多网站为了反爬都会采取各种各样的策略,比较简单粗暴的一种做法就是图片验证码,随着爬虫技术与反爬技术的演变,目前验证码也越来越复杂,比较高端的如Google的I‘m not a robot,极验等等。这些新的反爬方式大多都基于用户行为分析用户点击前的鼠标轨迹来判断是访问者是程序还是人。 基于图像处理的图片验证码识别 这篇文章介绍的是破解一般“传统”的图片验证码的步骤。上面提到的极验(目前应用比较广)也已经可以被破解,知乎上有相关的专栏,这里就不重复了。 即便是传统的图片验证码,也是有难度区分的(图一是我母校研究生院官网上的验证码,基本形同虚设;图二则是某网站的会员登录时的验证码增加了一些干扰信息,字符也有所粘连),但是破解的流程大致是一样的。 图1 图2 ▐ 识别步骤 获取样本 从目标网站获取了5000个验证码图片到本地,作为样本。因为后期需要进行监督学习样本量要足够大。 样本去噪 ✎ 先二值化图片 这一步是为了增强图片的对比度,利于后期图片图像处理,代码如下: # 二值化图片 @staticmethod def two_value_img(img_path, threshold): img = Image.open(img_path).convert('L') # setup a converting table with constant threshold tables