0x00 摸索与踩坑在爬虫与反爬虫的对抗中,验证码破解无疑是一个爬虫工作者阶段性的学习目标。JS破解与验证码识别中自主进行验证码的识别代码的编写是一个很高的门槛,因为这其中需要用到人工智能-深度甚至> 在爬虫与反爬虫的对抗中,验证码破解无疑是一个爬虫工作者阶段性的学习目标。JS破解与验证码识别中自主进行验证码的识别代码的编写是一个很高的门槛,因为这其中需要用到人工智能-深度的知识。
对接识别网站
在对抗验证码反爬虫时,最初的我只会对接可以识别简单验证码的网站或"白嫖"百度智能云的"OCR"识别。
虽然这两种方式都能解决当时的问题,但是会增加爬虫的成本和降低效率。
费用问题
对接识别虽然单次价格很低廉,但是对于我们每一个爬虫来说难道都是几次上千次的请求吗?显然不是。那计算下来确实是一笔不可忽略的费用!
对于简单是英文数字一半都是*0.01/次*
的价格,按每天上万次的请求算下来0.01*10000=100
看着也是肉疼,况且这是最低的类型...
效率问题
百度OCR识别虽然没有价格方面的疑虑,但是在识别精度上可以说是极其感人,尤其是在一些扭曲、干扰比较多的验证码上。
寻找验证码识别的解决办法
某一天有人问我:"能做本地验证码识别吗?"
当时我还处于很底层的爬虫研究者,仅仅是能解决一些简单的加密的网站(虽然现在也很菜就是了)。
那时我以为验证码的识别都是靠人工去完成的,包括那些对接的网站,我的认知是他们有很多人帮他们"打码"。
但这个人让我知道了,原来不是全靠人工去完成的,人工智能也可以完成这些东西!于是我就开始寻找具体的解决办法。
YOLO框架
我找到第的一个关于人工智能识别方面的工具,YOLO框架。当时了解到它可以做车牌识别,自动识别车牌的位置,并识别车牌的内容。
于是我想,那它应该也可以做验证码识别吧!
于是带着这个想法,我开始摸索如何标注如何训练如何部署识别。
但是到最后发现,标注似乎是一个不可能完成的事,因为训练需要大量样本,当时我只会把一个个字符圈出来打上标签,还不会只用分类器训练,于是我放弃了使用yolo来做验证码识别。
但是它仍然是一个超级好用的深度学习框架!
CC框架
CC框架是小哥 @hope 借助Caffe框架来编写易语言使用的深度学习框架
但是我接触的是它的可视化训练框架MCG_CC,简单方便的操作,基本上可以让你无门槛训练一个分类器。
它解决了我英数验证码识别上的难题。
它现在已经停止维护了,但是你如果找作者 @风云思星 应该能要到一份可以使用的框架。
Pytorch
前面的只是暂时解决问题,如果遇到工具不维护或者更麻烦的验证码,比如滑块、点选等,那将束手无策!
于是走向真正的深度学习之路。
最一开始我在B站上看了很多关于人工智能-深度学习方面的教程,比如OpenCV、机器学习、tensorflow、pytorch等等,但是它们都让我感觉到一个字——"烦"。
大量的理论,而且是听不懂的理论,学到最后只是会了一点名词而已,仍然写不出任何代码。
但是一个契机出现了。
无意间接触了 @冷月 大佬的深度学习课程,专门讲如何使用pytorch实现验证码识别。
冷月大佬博客
虽然只有几节课,但是大量的实战以及简洁的代码让你虽然不能自己完整写出一个识别方案,但是能根据框架学习并魔改出自己想要的网络,并应用。
就是在这个过程中,我慢慢对深度学习有了一定的了解。
顺便一提,冷月大佬很强!超级强!
进阶学习
虽然可以根据冷月大佬的代码魔改出自己的模型,但也仅止于此。要知道爬虫与反爬虫的战斗日息万变,各种奇葩的验证码层出不穷,虽然已有的解决方案能完成大部分的验证码识别,但是已经不懂原理,类型稍变就会无从下手。比如旋转验证码、手势验证码等。
《动手学习深度学习V2》
于是我又开始从新啃那些看不懂的教程,机器学习、OpenCV...
直到偶然间在机器之心中看到一篇推荐《动手学习深度学习V2》的文章...
书中以大量简洁易懂的语言及实战来讲解如何使用深度学习。
最关键是为了方便初学者,他们甚至把那些麻烦难懂的步骤封装起来,让初学者也能轻易实现一个模型的训练。
每一步的代码,每一步是输出都写的很清楚,跟着一步步做就能成功完成每一小节。
每一次成功的运行都能让你得到无比的成就感,这无疑是你继续学习下去的动力!
甚至在B站有每一节中文视频讲解,直播讲解!
总之,很推荐这本书!
写在最后
这篇文章只是我个人的浅薄的见解,如果有大佬对此有更高深或者更好的见解请指正!我也能及时认识到自己的不足并改正。谢谢!
写于2021/09/12
是一个没毕业的测试开发实习生
想去做爬虫相关的岗位