爬虫如何解决验证码的问题

今天要聊的就是在爬虫遇到验证码,如何去解决。

 

  1.前言:关于验证码,我觉得是很low逼的技术,但是很多面试官都会问到如何解决验证码,好像是能识别验证的就代表了爬虫工程师的技术很牛逼,相反,爬虫工程师就是菜鸟。我觉得以此来评价爬虫工程师的水平高低,是非常不合理的。

  2. 网站为何要用验证码?

    网站担心别人暴力破解刷票、论坛灌水、刷页,防止爬虫爬取数据,防止别人利用短信验证码做短信炸弹等原因。

    有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。但我们还是 提醒大家要保护好自己的密码 ,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码 ,免得你的账号被人盗用给自己带来不必要的麻烦。

  3.识别验证码的技术有哪些?

    3.1  Tesseract-OCR

      这个只能识别简单的验证码,也就是要求数字和字母必须规则,弯曲变形,遇到不规则的验证码,识别率并不是很高,不过可以自己去训练模型。

    3.2   人工打码   

        这个需要花费一定的费用,但是识别率还是很高的,有很多打码平台,识别一个验证码的代价仅仅是0.01分钱,如果要爬取的网站很多的时候,遇到验证码又是各不相同,最好的方式是去花费一些金钱来做这件事情。为什么呢?因为随便照片一个爬虫工程师的工资都是15k左右吧,按照一天的工资计算800元计算。识别一个验证码按照一分钱计算。程序员一天的工资可以识别8万个验证码,所以人工打码是最好的选择。一个企业的能否生存下去,并不是因为技术的好才存活下去的。而是需要各种环境,机遇。一些大的公司也会借用小的公司的技术,比如支付宝人脸识别是自己开发的吗?所以,合理的借力也是成功的必要条件。

    3.3   机器学习

      使用机器学习去识别验证码,识别率比人的都高,缺点是需要大量的训练数据,这些数据小手工标记。开发周期长,耗时。

    3.4   绕过验证码

      为何这个在最后说呢?因为我觉得这个更重要,我在爬虫的时候遇到各种需要登录网址,也有验证码。就会手工的吧cookie信息复制下来,加到请求头上就可以了。如此简单的技术,我们为何不用呢??

    3.5  万能识别库

      这个在网上还是可以找到,别人已经训练好了。

    3.6  软件定制

      在淘宝上或者一些验证码识别群,有一些人专门从事验证码的识别工作,收费费用合理,大概100--1000元钱,普通的验证码也就两三百块钱。也可以去找他们学习这项技术,并且也不难

 

    3.7  ADSL动态IP服务器原理

      

      ADSL动态IP服务器,并不是什么高大上的方式,也不是什么特别高端的服务器,相反,使用起来,我们一般是用配置非常低的那一类,因为这个时候重要的是数量而不是质量。

      原理很简单,在家庭网络中宽带上网只要断开再拨号一次,链接成功就会更换一次外网ip。并且链接建立后网速比较稳定。这就是动态ip了,一般这个ip池很大,一个城市一般会有5W-30W的ip。基本属于用不完。so,只要有一台接入了宽带的电脑,都可以叫做ADSL动态IP服务器。但是,你要明白这样以来时间将会有部分消耗在网络建立的时间上大约十秒。

例如我们现在要攻克的R项目。他的页面每两次访问就会被强制跳转到验证码页面,,so,为了跳过验证码就得每两次访问就换一次ip。而且,最严重的就是要是面对这样高限制ip的,那么就不能在一台机器上通过多开爬虫客户端从而实现单机器的分布式爬虫。效率低很多。要想提高效率要么是ip限制次数比较高的。比如1000/ip这种,。要么就是多机器每机器单个爬虫的分布式了

 

 

 

结束语:

  不管是黑猫还是白猫,逮着老鼠都是好猫。识别验证的方式千千万万,总会有一个适合自己的。

 

 

    

 

posted @ 2017-12-28 14:30  淋哥  阅读(5114)  评论(1编辑  收藏  举报