关于验证码
做爬虫多多少少会遇到,当然有很多办法解决
今天就先搞个最直接的:
材料:selenium、PIL、百度
过程:selenium模拟登陆输入帐号密码-》获取验证码-》处理验证码-》输入完成点登陆-》获取cookies-》给requests用
下面主要记录下图片处理的想法:
通过selenium把验证码图片截出来
2.处理
我一般处理会用到反色、去色、去杂、二值化,这要根据具体验证码来使用
像上面这种验证码,不做任何处理,识别率大概在5%
去杂就是把辅助线清理一下,这种方法有时候有用,但对上面的验证码用处没有那么大,还要加上颜色过滤等操作才会比较好
单纯去杂:
就算是单纯去杂后,识别率都能提高到50%以上
二值化,讲真这个是个双刃剑,如果单独使用指不定还会出什么幺蛾子。建议先滤色,把多余的颜色尽量滤出来,再做二值化处理
二值化+滤色:
这样子 识别率基本上70%是有了 ,可以看到还有点干扰线,这种干扰线可以在前期继续用滤色清理,鉴于每次干扰线都不太一样,取舍一下还是不做了。而且这种程度的干扰线已经不是很影响识别效率。
3.识别
现在机器学习那么火 可以自行百度下比较热门的框架玩玩,文档教程都蛮多的。不过这个需要的样本量有点大,为了拿足够数量,还要写个脚本去爬别人的验证码。。。
所以,接个打码平台完美解决 均价大概1元100次。权衡下成本。如果实在是量大而且网站比较固定可以考虑自己做
后记:
讲真selenium真是爬虫届的按键精灵,足够灵活,为所欲为。不过消耗太大了1G内存最多运行2、3个工程。所以能不用就不用吧。。不然钱包遭不住 。一般只是用来获取cookies,类似登陆ins,淘宝之类。听说淘宝有对抗selenium的方法,不过网上已经有对抗教程了。。
PhantomJS消耗比selenium少30%左右,暂时没有遇到传说中的OOM,自己的ins爬虫现在就是用PhantomJS。关于ins,现在ajax加载每次都有加密,看得我人都晕了,前端又没技术,不会分析。爬虫最有意思感觉是黑吃黑,爬了就跑 别人还不能告,又没啥办法对付,充实了硬盘,还不错。