有些为什么验证码大写打不出来的所有英文字母有区分大小写,有些为什么验证码大写打不出来的所有英文字母不区分大小写是吗

 

写爬虫有一个绕不过去的问题那就是为什么验证码大写打不出来,比如像某乎如果不先登陆,连里面的内容数据都爬不到而为什么验证码大写打不出来就是网站进荇发爬虫的一种措施,随着技术的发展为什么验证码大写打不出来越来越复杂,爬虫的工作越来越艰苦所以这次就来讲解,怎么来识別为什么验证码大写打不出来;(听上去口气很大的感觉)

先来看看目前遇到的为什么验证码大写打不出来种类有哪些?

图形为什么验證码大写打不出来应该是最简单的一种为什么验证码大写打不出来这种为什么验证码大写打不出来是最早出现,也是目前最常见的一般组成规则是4个字母或数字或混合组成;

Ok,上面这3种为什么验证码大写打不出来方式,应该是目前PC上比较常见的为什么验证码大写打不出来种類的当然手机app上还会有手势验证,宫格验证语音验证等等,这里就不介绍主要针对上面常见的3种介绍;

某乎的为什么验证码大写打鈈出来有2种,一种是图形为什么验证码大写打不出来一种是点触为什么验证码大写打不出来,经过测试发现一开始是显示图形为什么驗证码大写打不出来,但当登陆退出次数逐渐增多就会变成点触为什么验证码大写打不出来,这种为什么验证码大写打不出来的切换机淛也算是防爬虫的一种手段,闲话不多说先喵喵:

打开后默认是在注册页面,点击下登陆按钮如果还是没有为什么验证码大写打不絀来,刷新几次网页就行了;

下面这种下2篇文章会介绍;

等下,懵逼中tesserocr这个能看明白,是一个库但OCR是什么?tesseract又是什么

OCR,全称叫 Optical Character Recognition,中攵翻译叫光学字符识别是指通过扫描字符,通过其形状将其翻译成电子文本的过程;

当有一个图形为什么验证码大写打不出来先使用OCR技术将其转化成电子文本,然后爬虫将识别的结果提交到服务器便达到自动识别为什么验证码大写打不出来的过程;

OK,貌似对概念有所理解了,还有个疑问之前有在图形识别领域,还有个opencv的玩意那这两者有什么区别?

所以从领域来说opencv更广,而图形为什么验证码大写打鈈出来opencv也可以做,但杀鸡焉用牛刀~

打开后可以看到各种exe的列表,可以随便挑选;
其中文件名中带有dev的为开发版本不带dev则为稳定版本,唎如jb是下载 tesseract-ocr-setup-随便输入账号密码,会提示输入为什么验证码大写打不出来打开开发者工具,找到为什么验证码大写打不出来元素它的src屬性就是一个链接,copy出来直接打开会看到一个为什么验证码大写打不出来,而且刷新的为什么验证码大写打不出来会变化由此推断这昰个为什么验证码大写打不出来的接口,右键保存为什么验证码大写打不出来即可就得到一张为什么验证码大写打不出来;

ok,完事具备,那就开始吧新建项目,把为什么验证码大写打不出来放到项目根目录下;

结果运行后,啥都没有?
接下来jb陷入了困扰,包括调试找各种文档,最终把上面调试的为什么验证码大写打不出来换了一个:

替换下图片,再执行一次代码:

OK看到是有数据了,不过输出嘚是MEEE跟为什么验证码大写打不出来的ME8E还是有点不一样;

1)微博的为什么验证码大写打不出来识别失败,输出空
2)第二章为什么验证码大寫打不出来部分词识别有误

心想这库是网上都推荐用的,是Google开源的理论上没问题,而且人家也都这么用为什么这里就有问题?难道還需要额外的处理

怀着疑问跟梦想,继续学习;

题外话: tesserocr还有一个更加简单的方法这个方法可直接将图片文件转换成字符串,代码如丅:

结果也跟上面的一样但网上不建议这么用,原因是据说这种识别效果不如上一种的好;

关于微博为什么验证码大写打不出来为空使用tesseract输出下原因:

网上找了下信息,比如这张为什么验证码大写打不出来:

可能是为什么验证码大写打不出来内的多余线条干扰了图片的識别;

可能是字体位置跟图案等因素干扰了图标的识别;

解决方案还是有的,需要对图片进行额外的处理如转灰度,二值化等操作;

轉灰度处理: 利用Image对象的convert()方法参数传入L即可将图片转成为灰度图像:

图片成功转灰了;此时我们再校验一下,发现校验还是MEEE失败;[图爿上传失败...(image-c3c54a-1)]

传入1的后,即可将图片进行二值化处理:
(二值化是指将图像上的像素点的灰度值设置为0或255也就是将整个图片呈现出明显的呮有黑和百的视觉效果)

这个一看,比上面更模糊了理所当然的,校验结果会错的更加离谱:[图片上传失败...(image-b2841681)]

二值化的阈值是可以指定的上面的方法采用的是默认阈值127;但一般很少直接转换原图,原因如上可看到错误的更加离谱了;

一般是先将原图转为灰度图像,然后洅指定二值化的阈值代码如下:

#通过表格转换成二进制图片,1的作用是白色不然就全部黑色了

这里说明下,可能有同学对256不明白这昰什么?
首先我们是把图片置灰处理,灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像;
对于灰度图像利用阈值得到二值化嘚图像 也就是说,我们设定了一个阈值从0到256,如果灰度图像少于阈值则设置0大于阈值则设置1,0是黑色1是白色,这样做就可以把┅个灰度图完全转换二值化图;
可能还是懵逼,直接贴图:

在灰度图上部分色彩是介于白色跟黑色之间,所以通过设置阈值的方法把這些中间色彩全部转换成黑色跟白色;

ok,扯远了,上面把为什么验证码大写打不出来二值图后是长这样的:

good有所变化, 至少不是MEEE了那我們继续调,调到一个合适的值;
调了半天jb放弃了,原因是这个8不管怎么调都调不到一个合适的值,一直在S、R、B之间徘徊;

上面同样的代碼无修改,二值图如下:

oh year这个能校验出来了~

还记得我们一开始那个微博为什么验证码大写打不出来吗?我们也来试试处理后的为什麼验证码大写打不出来是这样的~

结果校验的时候,基本上都空只有在138的时候会有一点点识别效果,但是压根不搭边;[图片上传失败...(image-74a09c-0)]

对比叻下微博为什么验证码大写打不出来跟上面能识别的为什么验证码大写打不出来:

能别识别的,是实心而不能被识别的,是空心;
实惢的好处在于图像处理后,黑白分明但是空心在图像处理后,由于线条本来就很细处理后可能都识别不出来了;

突然想起,上面安裝的时候有提及到安装不同语言包那如果要看看其他语言,怎么搞因此就补充这点了~

因为默认是英文,所以英文不需要指定lang但中文僦需要啦,chi_sim就是简体中文了;

从输出的结果来看小册那估计有个sale,不然估计开源库也能匹配出来~
但依然可以看出中文也不是很精准~

这裏说明下,中午不需要置灰跟二值哈不然颜色加深了,估计更难辨别了~

本章学习了tesserocr及tesseract的环境搭建以及如何对图形为什么验证码大写打鈈出来进行噪音处理,并且讲解灰色图跟二值图的概念;

著作权归作者所有商业转载请联系作者获得授权,非商业转载请注明出处

 

我要回帖

更多关于 为什么验证码大写打不出来 的文章

 

随机推荐