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

蜘蛛网.jpg

验证码的识别

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

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

集成到爬虫框架

爬虫框架NetDiscovery,github地址:https://github.com/fengzhizi715/NetDiscovery

对于验证码的识别,最终暴露出来是一个web服务。该web服务采用Vert.x进行开发,对于爬虫而言,只需知道它是一个web服务即可,无需知道后面的逻辑。而且,web服务的地址也可能会更换。

最终的架构.png

所以,我在爬虫框架中封装了一个工具方法,只需要传入图片的url地址就能够返回验证码的内容。

    /**
     * 返回验证码的内容
     * @param imageUrl 验证码的url
     * @return
     */
    public static String getCaptcha(String imageUrl) 

测试几张图片

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

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

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

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

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

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

执行结果:

862FF
7FA88
F3686
6D964
FE9FC
6494A

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

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

验证码.jpeg

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

NetDiscovery的未来

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法+

基于RNN的音频降噪算法 (附完整C代码)

前几天无意间看到一个项目rnnoise。 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法。 采用的是 GR...

2K5
来自专栏Windows Community

Windows Developer Day - Windows AI Platform

本次 Windows Developer Day,最值得期待的莫过于 Windows AI Platform 了,可以说是千呼万唤始出来。观看直播的开发者们,留...

33011
来自专栏技术记录

FFMPEG指令

FFmpeg是一个用于音视频处理的自由软件,被广泛用于音视频开发。FFmpeg功能强大,本文主要介绍如何使用FFmpeg命令行工具进行简单的视频处理。 安装FF...

1.8K17
来自专栏UML

用例图教程(示例指南)

用例是系统分析中用于识别,澄清和组织系统需求的方法。用例由特定环境中系统和用户之间的一组可能的交互序列组成,并且与特定目标相关。它由一组元素(例如,类和接口)组...

2303
来自专栏何俊林

FFmpeg总结(一)FFmpeg官方文档分块

正式开启FFmpeg总结,预计这个将是一个2-3年的时间线,或者更久,今天是从官方文档出发,带大家找到最小块的切入点。 http://ffmpeg.org/d...

2997
来自专栏WeTest质量开放平台团队的专栏

UPA深度性能报告解读

原文链接:http://wetest.qq.com/lab/view/403.html

1192
来自专栏WeTest质量开放平台团队的专栏

UPA深度性能报告解读

UPA作为腾讯WeTest与Unity官方联合打造的客户端性能分析工具,为开发者提供了极大的便利和效能提升。产出的分析报告内容详尽,但您是否真的读懂了报告?是否...

812
来自专栏大数据文摘

想入门深度学习不会搭建环境?手把手教你在Amazon EC2上安装Keras

5202
来自专栏编程坑太多

简单爬虫,突破复杂验证码和IP访问限制

5841
来自专栏九彩拼盘的叨叨叨

你收到的文件被恶意篡改过吗? 摘要算法简介

想象这样的场景,有客户给你发机密文件。那你怎么确定你收到的文件就是客户发你的,而没有被第三方恶意篡改过呢?

801

扫码关注云+社区

领取腾讯云代金券