将验证码识别功能集成到现有的爬虫框架

Posted Java与Android技术栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将验证码识别功能集成到现有的爬虫框架相关的知识,希望对你有一定的参考价值。




验证码的识别

过年期间我曾经写过一篇文章, 目前已经对该功能做了一些优化,可以支持几种类型的验证码识别。其核心思想仍然是上一篇文章所提到的,使用tensorflow来训练标注过的验证码。目前,多种类型的验证码训练完之后可以放到一个模型中。未来,有新增的验证码类型通过训练之后也可以整合到这个模型中。

通过多次训练得到的经验大致是,一种类型的验证码标注4000-5000个数据,就能获得90%以上的识别准确率。

集成到爬虫框架

将验证码识别功能集成到现有的爬虫框架

 
   
   
 
  1.    /**

  2.     * 返回验证码的内容

  3.     * @param imageUrl 验证码的url

  4.     * @return

  5.     */

  6.    public static String getCaptcha(String imageUrl)

测试几张图片

 
   
   
 
  1.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/1.png"));

  2.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/2.png"));

  3.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/3.png"));

  4.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/4.png"));

  5.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/5.png"));

  6.        System.out.println(Utils.getCaptcha("http://47.97.7.119/qianmou/images/captcha/6.png"));

执行结果:

 
   
   
 
  1. 862FF

  2. 7FA88

  3. F3686

  4. 6D964

  5. FE9FC

  6. 6494A

经过测试后,发现只有第一个验证码是识别错误的,其余五个都能够正确地识别出验证码中的数字和字母。

第一个验证码正确的值应该是862DF,而不是862FF。


识别完验证码之后,爬虫就可以模拟“用户”的登录行为,登录成功后记录下Header中的“Set-Cookie”的值,后面的操作就可以使用这个Cookie的值。

NetDiscovery的未来

首先,NetDiscovery需要增加多种类型验证码的识别,需要不断的标注数据。

其次,NetDiscovery打算做成一个比较通用的爬虫框架,虽然最近工作比较繁忙,但是每周仍然会有代码的提交。

下一个比较大的功能,应该是完成跟图像框架的结合。目前NetDiscovery的selenium模块可以实现对网页的截图,未来打算实现从截取的图片中提取有用的信息。这样从一定程度上能够对抗反爬虫。


关注【Java与Android技术栈】

更多精彩内容请关注扫码


以上是关于将验证码识别功能集成到现有的爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别

python爬虫scrapy框架——人工识别知乎登录知乎倒立文字验证码和数字英文验证码

爬虫实战篇---使用Scrapy框架进行模拟登录(包括借助阿里云服务自动识别验证码)

使用刀片将 Angular5 集成到现有的 Laravel 项目中

写给爬虫工程师的验证码识别教程

中文项目:快速识别验证码,CNN也能为爬虫保驾护航